要約:私は、バックグラウンドでプロセスを実行するbashスクリプトを持っています。通常のコマンドとそのようなコマンド置換ブロック$(...)
となります。スクリプト自体は、バックグラウンドに分岐するプロセスを生成します。
#!/bin/sh
echo something
sleep 5 &
はシェルでこのスクリプトを実行すると、すぐに戻ります(と印刷「何か」)$(...)
内部でそれを実行するには、バックグラウンドに「スリープ」を待って、5秒間停止します。このテストケースに減少させることができます終わる。
コマンド置換シェル内で開始され、そのプロセスツリー内のすべての子プロセスを含む、バックグラウンドでプロセスを起動するものに適用されます。 bashとzshの両方に影響を与えると思われ、他の人は試していません。
オリジナルの質問:は、私はそれが実行されるたびに標準出力に値を印刷することになっても、それがXのクリップボードにコピーされたbashスクリプトを持っています。
#!/bin/sh
echo something
echo something | xclip -selection clipboard
このスクリプトは(の「何か」を呼びましょう)(実際には別のコマンドの出力である)、この単語を取得するために使用されることを意味しているとのようなさまざまな方法で使用される:
$ something
something
$ xclip -o -selection clipboard
something
$ echo $(something)
^C
通常のstdoutに出力し、通常のXアプリケーションで使用するために出力をクリップボードにコピーします。また、コマンドの途中でこの単語を挿入するために、stdoutをbashコマンドに置き換えることもできます。
しかし、bashコマンドの置換により、xclip
は強制的にフォアグラウンドに残ります。 xclip
は通常、クライアントがクリップボードの内容を提供することをXクリップボードに要求しているので、自身をデーモン化します。デフォルトの動作は、クリップボードの内容が置き換えられたときに終了させることです。
$(...)
殻の内側に
をdaemonizes何でも、誰でも、この動作を説明することができることを適用しているようですので、XCLIPで、この問題を持った後、私は、私はこの質問の冒頭で書いた最小限のテストケースを作ったのですか?私はそれを避ける方法はありますか?
Woo!完璧で非常に簡単なソリューション。ありがとう! – dequis
ちなみに、/ dev/nullの代わりにファイルにリダイレクトすると出力をキャプチャするように見えますが、ここでは出力ファイルはバックグラウンドプロセスが終了した後に更新されるようです。 (私はこれのためにそれを必要としない) – dequis