Bashでは、次のことができます。
if [ -f /tmp/test.txt ]; then echo "true"; fi
ただし、前にSudo
を追加すると、機能しなくなります。
Sudo if [ -f /tmp/test.txt ]; then echo "true"; fi
-bash: syntax error near unexpected token `then'
どうすれば機能させることができますか?
Sudo
は、シェルインタープリターを介さずに、exec
を使用して引数を実行します。したがって、実際のバイナリプログラムに限定され、シェル関数、エイリアス、または組み込み関数を使用できません(if
は組み込み関数です)。 -i
および-s
オプションを使用して、ログインシェルまたは非ログインシェルでそれぞれ指定されたコマンドを実行できます(または対話的にシェルだけを実行します。セミコロンをエスケープするか、コマンドを引用符で囲む必要があることに注意してください)。
$ Sudo if [ -n x ]; then echo y; fi
-bash: syntax error near unexpected token `then'
$ Sudo if [ -n x ]\; then echo y\; fi
Sudo: if: command not found
$ Sudo -i if [ -n x ]\; then echo y\; fi
y
$ Sudo -s 'if [ -n x ]; then echo y; fi'
y
シェルを介して文字列引数として行を呼び出してみてください。
Sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'