我想在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
通过一个 shell 运行该命令,然后运行另一个 shell。您需要确保正确转义所有内容,以便内壳能够看到您希望它看到的命令。
这与这里的情况类似:在 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