シェルで1行に複数のコマンドを実行する 質問する

シェルで1行に複数のコマンドを実行する 質問する

ファイルを持ってい/templates/appleて、

  1. それを2つの異なる場所に置いて
  2. オリジナルを削除します。

したがって、AND/templates/appleにコピーされ、その後、元のものを削除したいと思います。/templates/used/templates/inuse

cpこれを行う最善の方法は、ですかrm? それとも、もっと良い方法がありますか?

すべてを 1 行で実行したいので、次のようになると思います。

cp /templates/apple /templates/used | cp /templates/apple /templates/inuse | rm /templates/apple

これは正しい構文ですか?

ベストアンサー1

コマンドの出力を別のコマンドに送るために (パイプ)を使用しています|。探しているのは、&&前のコマンドが成功した場合にのみ次のコマンドを実行する演算子です。

cp /templates/apple /templates/used && cp /templates/apple /templates/inuse && rm /templates/apple

または

cp /templates/apple /templates/used && mv /templates/apple /templates/inuse

bash のコマンド演算子/区切り文字を(網羅的ではありませんが)要約すると、次のようになります。

  • |は、あるコマンドの標準出力 ( stdout) を別のコマンドの標準入力にパイプ (パイプライン) します。 は、stderrデフォルトの出力先が何であれ、そこに出力されることに注意してください。
  • |&stdoutあるコマンドのとを別のコマンドの標準入力にパイプしますstderr。非常に便利で、bash バージョン 4 以降で使用できます。
  • &&&&前のコマンドが成功した場合にのみ、右側のコマンドを実行します。
  • ||||前のコマンドが失敗した場合にのみ、右側のコマンドを実行します。
  • ;;前のコマンドが成功したか失敗したかに関係なく、常に右側のコマンドを実行します。set -eが以前に呼び出されていない場合は、bashエラーで失敗します。
  • &左側のコマンドをバックグラウンド ジョブとして実行し、同時に右側のコマンドも実行します (&バックグラウンド ジョブとして実行するために で終了することもできます)。

おすすめ記事