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


10

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

私は以下を試しました:

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;"

セミコロンにエラーがあると書いてあります;

それを行う方法を知っていますか?

回答:


14

このコマンドは正常に実行されます。

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"

もちろん、OPが本当に実際にとコマンドの;間にaを入力したい場合を除いて、括弧を追加する理由はありません。セミコロンを省略すれば機能します。tcpdumpls
G-Manは 'Reinstate Monica'を

2

以下のようanubhavaは言うあなたの、

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;"

;最後にも必要ありませんが、問題はありません)。


1

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

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

こんにちは。NOHUPは、ユーザーが切断しても、コマンドをバックグラウンドで実行したままにします。覚えていません。どうもありがとう。

(1)nohupバックグラウンドでコマンドを実行するときに使用するのは良いことですが、これは実際にはこの質問とは関係ありません。(2)この答えは間違っnohupています。それ自体では、コマンドはバックグラウンドで実行されません。それでも入力する必要があります&(コマンドの構文エラーにより、開始した場所に戻ります)。
G-Manが 'Reinstate Monica'を

0

アヌババの素晴らしい答えに追加するだけです:

次の{}ように使用することもできます。

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

{}()サブシェルを作成しないという点よりも少し効率的です。既にない限り、前後に{}スペースが必要です。{;}&


もちろん、ユーザーが本当にない限り、すべての中括弧や括弧を追加する理由はありません本当に本当に入力したい;の間tcpdumplsコマンドを-ちょうどセミコロンを省略し、それが動作します。
G-Manは 'Reinstate Monica'を

-1

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

$ su -c "ls && ls"

Auch ..それは私のエラーです。プロセスをバックグラウンドで実行したかったのですが、コマンドを分離するための&&に気づきませんでした。Thx

3
&&は「最初のコマンドが成功した場合にのみ2番目のコマンドを実行する」ことを意味します。最初のコマンドがエラーになると、2番目のコマンドは実行されません。これは通常は良いことですが、&&を純粋なセパレータとして説明するのはためらいます。
レオ

そして、もしあなたtcpdumpがバックグラウンドでプロセスを実行したいなら、&&あなたは何の役にも立ちません。
G-Manは 'Reinstate Monica'を
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.