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あるシェルと別のシェルからコマンドを実行するように要求しています。内部シェルが見たいコマンドを表示できるように、すべてを正しくエスケープする必要があります。

これはここの状況に似ています。ssh $host $FOO および ssh $host "sudo su user -c $FOO" タイプ構成で参照されます。

しかし、を使用して同じことを行い、シェルを削除し、エスケープを簡単にすることができますが、sudoなぜ実行したいのかわかりません。su -csudo

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

おすすめ記事