suを使用してBashで複数のコマンドを実行する

suを使用してBashで複数のコマンドを実行する

su -crootで複数のコマンドを実行したいです。これには追加のスクリプトを使用したくありません。

私は以下を試しました:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"

ただし、最初の項目だけが実行され、ls最初の項目は実行されません。

私は以下を試しました:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

ところでセミコロンにエラーがあると出てきますね;

どうすればわかりますか?

答え1

このコマンドはうまく動作します。

su root -c "date; ls -lh"

しかし、このコマンドでは:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

&以前はそのような経験があったため、;エラーが発生します。コマンドを削除し&てやり直してください。

または、次のようにコマンドを実行できます。

su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"

答え2

〜のようにアヌババ、あなたの

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

&すぐに実行できないため、コマンドは失敗します ;。シェルに直接コマンドを入力すると、これを確認できます。

  • true & true  働く
  • true & ; true動作しません

tcpdumpコマンドをバックグラウンドで実行するには、次のように;削除します。

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"

;(結局、どちらも必要ありませんが、病気ではありません)。

答え3

私はこのコマンドがあなたが望むものを得ると思いますnohup... tcpdumpはバックグラウンドで実行されます(アンパサンドは必要ありません):

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"

答え4

&&次のようにコマンドを区切るために使用されます。

$ su -c "ls && ls"

関連情報