거기에 있고 싶다 sudo su test -c [command]
.
다음 명령을 실행하면 r1rnrnrnrrnr
대신 다음과 같은 결과가 나타납니다 \r1\r\n\r\n\r\n\r\r\n\r
.
SET_TEST_MSG='\r1\r\n\r\n\r\n\r\r\n\r'
sudo su test -c "/usr/bin/screen -dmS test bash -c \"echo $SET_TEST_MSG; exec bash\""
$PROG -n $PICKVM 0 -1 -d "$SET_TEST_MSG"
런타임에 백슬래시를 유지하는 방법은 무엇입니까 sudo su test -c [command]
?
답변1
su
하나의 쉘과 다른 쉘을 통해 명령을 실행하도록 요청하고 있습니다 . 내부 쉘이 보고 싶은 명령을 볼 수 있도록 모든 것을 올바르게 이스케이프해야 합니다.
이는 여기 상황과 유사합니다.ssh $host $FOO 및 ssh $host "sudo su user -c $FOO" 유형 구성에서 참조됩니다.
그러나 을 사용하여 동일한 작업을 수행하고 쉘을 제거하고 탈출을 더 쉽게 만들 수 sudo
있는데 왜 실행하려는지 잘 모르겠습니다 .su -c
sudo
msg='\r1\r\n\r\n\r\n\r\r\n\r'
sudo -u test /usr/bin/screen -dmS test bash -c "echo '$msg'; exec bash"
또는 가장 안쪽 명령을 스크립트 파일에 넣고 실행하십시오. (대상 사용자가 스크립트를 실행할 수 있는지 확인하십시오.)
$ cat > /tmp/msgshell.sh <<'EOF'
#!/bin/bash
msg='\r1\r\n\r\n\r\n\r\r\n\r'
echo "$msg"
exec bash
EOF
$ chmod 755 /tmp/msgshell.sh
$ sudo -u test /usr/bin/screen -dmS test /tmp/msgshell.sh