そこにいたい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