web-dev-qa-db-ja.com

コマンドプロンプトからifステートメントを実行する

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'

どうすれば機能させることができますか?

20
m33lky

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
15
Kevin

シェルを介して文字列引数として行を呼び出してみてください。

Sudo /bin/sh -c 'if [ -f /tmp/test.txt ]; then echo "true"; fi'
10
Arcege