端末を出力せずにコマンドを実行する

端末を出力せずにコマンドを実行する

私の質問の背景知識を少しお話しします。私はnewsboatマクロを使ってリンクを操作できるターミナルRSSリーダーを使用しています。たとえば、cd ~/videos && youtube-dl %uYouTubeのビデオを~/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)

screenrun コマンドを使用して再接続

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

関連情報