私の質問の背景知識を少しお話しします。私はnewsboat
マクロを使ってリンクを操作できるターミナルRSSリーダーを使用しています。たとえば、cd ~/videos && youtube-dl %u
YouTubeのビデオを~/videos
。ただし、ダウンロードが完了するまでの出力はyoutube-dl
端末に印刷され、その時点では使用できませんnewsboat
。
コマンドが実行された端末をすぐに使用できるように、「他の場所」で実行されるようにコマンドを表現する方法を知りたいです。
答え1
出力がまったく必要ない場合は、/dev/nullにリダイレクトしてください。
yourcommand > /dev/null 2>&1
それ以外の場合はファイルにリダイレクトできます。
yourcommand > /somwhere/file 2>&1
他のアプリケーションでコマンドを実行し、ニュースリーダーをすぐに使用したい場合は、バックグラウンドでコマンドを実行できます。このニュースボートでどのように機能するかはわかりませんが、シェルで&を使用してプログラムをバックグラウンドで送信できます。
yourcommand > /somwhere/file 2>&1 &
答え2
後で端末が閉じても「生きている」コマンドをバックグラウンドで自動的に実行するには、screen
分離モードで使用します。
screen -dm your_command(-s)
screen
run コマンドを使用して再接続
screen -r
再接続した画面を切り離すには、を押しますCTRL+A+D
。
それ以外の場合は、screen
実行コマンドを使用する必要がありますnohup
。したがって、後で端末が閉じられると、screen
ユーティリティのようにプロセスが実行されます。
nohup your_command(-s) &>/dev/null &
答え3
あなたの質問は、一つのことを尋ね、別のものを尋ねることから始まります。
最初に尋ねるのは、出力を破棄することです。これはリダイレクトを通じて簡単に行えます。
$ echo hello 1> /dev/null 2>&1
2番目の質問は、端末を使い続けるために「他の場所」コマンドを実行することでした。これを「作業制御」といいます。
シェルのコマンド区切り文字を使用して、バックグラウンドですべてのコマンドを実行できます&
。次の2つのコマンドの動作を比較します。
$ sleep 5
$ sleep 5 &
ジョブがすでに実行されており、端末を使用して別のジョブを実行する必要があり、ジョブを完了するには、Ctrl-pauseZジョブを使用してbg
バックグラウンドで続行するように指示できます。
$ (sleep 10; echo hello)
^Z
[1]+ Stopped ( sleep 10; echo hello )
$ bg
[1]+ ( sleep 10; echo hello ) &
$ echo farewell
farewell
$ fg
( sleep 10; echo hello )
hello
このリンク職業管理に関してはかなり良い読書がありますbash
。