ノンブロッキングbashコマンド


11

次のbashスクリプトがあるとします。

#!/bin/sh
gedit
rm *.temp

を使用して実行するとsh ./test.shgeditポップアップが表示されますが、rmを閉じるまでパーツは実行されませんgedit

geditが閉じていなくてもスクリプトを実行し続けたいです。のようにgeditbashの実行をブロックしていません。

私が挙げた例はほんの一例です(rm最初の例は実際の状況では機能しません)。

回答:


25

探している用語は、ジョブの「バックグラウンド」と呼ばれます。シェルまたはスクリプトでコマンドを実行する場合、最後にフラグを追加してそれをバックグラウンドに送信し、新しいコマンドまたはスクリプトの残りの部分を引き続き実行できます。を含むほとんどのシェルではsh、これが&キャラクターです。

#!/bin/sh
gedit &
rm ./*.temp

こうすることで、シェルは終了を待たないgeditとの両方rmgedit並行して実行されます。

「ブロッキング」という用語は通常、多くの場合ファイルまたはデバイスへの入出力ストリームに関係しています。コンパイルされた言語でも、あなたが使用したのと同じような意味で使用されますが、bashや類似のシェルスクリプトでは、用語(および関数!)はかなり異なります。


ありがとうございました!Googleでfifoと入力結果しか得られなかった理由を説明します:D
Plante

私の印象は、Planteはスクリプトを書き直すのではなく、外部からスクリプトに影響を与え、各操作をバックグラウンドで実行したいということです。
ユーザー不明

@ユーザー:彼が何を望んでいるかを推測するのに数回読んだだけです。明確にするために、質問にコメントすることもできます。
カレブ2011

それがまさに私が必要としていたことです。これまでのところうまくいきます!
Plante
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.