Bash で複数のコマンドを実行する方法(一部はバックグラウンドで実行)

Bash で複数のコマンドを実行する方法(一部はバックグラウンドで実行)

bash で複数のコマンドを実行したいのですが、そのうちのいくつかはバックグラウンドで実行したいです。これを説明する最良の方法は、機能しない次のコマンドを使用することです...

for@barpc:~> (sleep 30;command1;command2 param ) & ; anotherCommand

これは 2 つの質問として捉えられると思います:

  1. コマンド内の & を終了するにはどうすればよいですか?
  2. これを解決するには、どのような方法が良いでしょうか?

その他の重要な詳細:

  • OpenSUSE 13.2
  • gnomeシェル

答え1

試してみてください

(sleep 5; ls) &  echo "Now"

これは希望通りに動作します。

答え2

必要なのは、;. を削除することだけです。. は&それ自体がコマンド区切り文字として機能するため、;その後に追加するのは無効です。

(sleep 30; command1; command2 param ) & anotherCommand

(セミコロンの後のスペースは必要ありません。この方が読みやすいからです。これは、シェル構文でスペースがオプションである数少ない場所の 1 つです。ほとんどの場所では、スペースは必須または禁止されています。)

これを実行するより良い方法については、実際に何をしようとしているかによって異なります。より良い提案を行うには、より多くの情報が必要です。

関連情報