質問の背景を少しお話ししましょう。リンクの操作にマクロを使用できるターミナルRSSリーダーnewsboat
を使用しています。たとえば、cd ~/videos && youtube-dl %u
を実行するマクロがあります。これにより、YouTubeビデオが~/videos
にダウンロードされます。ただし、youtube-dl
の出力は、ダウンロードが完了するまで端末に出力され、今回はnewsboat
の使用を続行できません。
コマンドを「どこか別の場所で」実行して、実行元の端末をすぐに使い続けることができるように、コマンドをどのようにフレーズできるのかと思います。
出力がまったく必要ない場合は、/ dev/nullにリダイレクトします。
yourcommand > /dev/null 2>&1
それ以外の場合は、ファイルにリダイレクトできます。
yourcommand > /somwhere/file 2>&1
また、別のアプリケーションからコマンドを実行し、ニュースリーダーをすぐに使用したい場合は、コマンドをバックグラウンドで実行することをお勧めします。このニュースボートでどのように機能するかはわかりませんが、シェルでは&でプログラムをバックラウンドに送信できます
yourcommand > /somwhere/file 2>&1 &
コマンドをバックグラウンドでサイレントに実行し、後でターミナルが閉じられても「存続」するには、分離モードでscreen
を使用します。
screen -dm your_command(-s)
executeを実行するコマンドでscreen
を再接続するには
screen -r
再接続された画面を切り離すには、CTRL+A+D
を押します。
screen
がない場合は、Nohup
を使用してコマンドを実行する必要があります。このため、screen
ユーティリティのように、後でターミナルが閉じられた場合にプロセスが実行されます。
Nohup your_command(-s) &>/dev/null &
あなたの質問はあることを尋ね始めるが、それから別のことについて尋ねることになる。
最初に尋ねるのは、出力を破棄することです。これはリダイレクトで簡単に行えます:
$ echo hello 1> /dev/null 2>&1
次に尋ねるのは、「どこか別の場所で」コマンドを実行して、ターミナルを引き続き使用できるようにすることです。これは「ジョブ制御」と呼ばれます。
シェルの&
コマンドセパレーターを使用して、任意のコマンドをバックグラウンドで実行できます。次の2つのコマンドの動作を比較します。
$ sleep 5
$ sleep 5 &
ジョブが既に実行中で、ターミナルを他のものに使用する必要があり、ジョブを完了させたい場合は、 Ctrl-Z ジョブを一時停止し、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
を使用したジョブ制御についてかなり良い読み物を持っています。