运行 sudo su test -c 命令时保留反斜杠

运行 sudo su test -c 命令时保留反斜杠

我想在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" 类型构造中引用

然而,我不确定你为什么要运行sudosu -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

相关内容