回答:
マーティン、アッシュ、ケビンの回答に加えて、ビット単位のAND *にアンパサンドが数学的に使用されていることがあります。
$ echo $(( 11 & 7 ))
3
ビット演算子に慣れていない場合:
11: 1011
7: 0111
-------- AND
3: 0011
各位置には、最初の数字と2番目の数字に1ビットがあり、回答でそのビットを1に設定します。
* Kevinの答えの機能は、論理 AND と呼ばれます。
Ashの答えを詳しく説明すると、リダイレクトで使用する場合、アンパサンドはシェルにファイル記述子をコピーするよう指示できます。このコマンドでecho "hello" > outputfile 2>&1
は、アンパサンドにより、標準エラー(stderr、ファイル記述子2)に到達する可能性のあるすべての出力が、標準出力(stdout、ファイル記述子1、左側のデフォルト)と同じ場所に移動します>
。>& outputfile
オペレータは、の省略形です> outputfile 2>&1
。
また、バッシュ4に新しい、句のための2つの新たなターミネーターはであるcase
コマンド;&
及び;;&
場合は、次のテストが行われたかどうか、もしそうであれば、そして「から落下」かどうかに影響しています。
>& filename
stdoutとstderrの両方を同じファイルに出力します。stderrのみをリダイレクトする(およびstdoutをそのままにする)場合は、実行します2> filename
。他の質問については、ほとんどの場合、nohup
との両方を使用し&
ます。
logout
or exit
コマンドを発行できます。
Bashシェルスクリプトでは、アンパサンド「&」を使用してプロセスを分岐します。
find -name hello &
これにより、findコマンドが分岐され、バックグラウンドで実行されます(PIDでいつでも強制終了できます)。
「&」を使用してLinuxシェルコマンドを実行する理由
プロンプトをすぐに戻すには、バックグラウンドでプロセスを実行します。
それらの機能は何ですか?
nohupを使用すると、ユーザーがログアウト(または開始シェルを終了)した後でも、バックグラウンドプロセスの実行を継続できます。
>&は 、標準出力と標準エラーの両方をログファイルにリダイレクトします。
&すぐにあなたのプロンプト背中を与えて、バックグラウンドでの全体のことを実行します。
説明:
すべてのLinuxプロセスは、入力「stdin」、標準出力「stdout」、標準エラー出力「stderr」の3つのI / Oチャネルを開きます。バイナリに使用できますが、従来はテキストです。ほとんどのプログラムが標準入力を閉じると、プログラムは終了します(これはプログラマーが変更できます)。
親シェルが終了すると、子のstdinが閉じられ、(通常、通常)子も終了します。さらに、子はソフトウェアシグナルSIGHUPを受信します。これは、ユーザーが「電話を切った」ことを示します(以前のモデム)。ここでのデフォルトも終了します。(注意、プログラマーはプログラムを書くときにこれらすべてを変更できます)。
したがって、nohupは、子プロセスに個別のI / O環境を与え、親シェルに関連付けられていないものに入出力を結び付け、子をSIGHUP信号から保護します。ユーザーが切断すると、ユーザーのシェルではなく、initが所有するnohupバックグラウンドプロセス(プロセス1)が表示されます。
ただしnohup
、プロセスがフォアグラウンドで実行されている場合、ジョブを完全に実行することはできないので&
、バックグラウンドでプログラムを実行するために使用されます。
@Martinの答えに加えて:(>&
上記の)アンパサンドのもう1つの用途は、stdout
との両方をキャプチャすること stderr
です。通常、「>」のみを使用して出力をファイルにリダイレクトした場合、出力はのみになり、stdout
エラーはありません。
マーティンとアッシュの答えに加えて、&&
トークンの使用が表示される場合があります。これは、「最初のコマンドが正常に実行された場合にのみ、2番目のコマンドを実行する」と言うために使用されます。適切に記述されたコマンドは、エラーがある場合、正常に終了しません。
[kevin@box ~]$ ls file && echo removing file && rm file
ls: file: No such file or directory
[kevin@box ~]$ touch file
[kevin@box ~]$ ls file && echo removing file && rm file
file
removing file
[kevin@box ~]$
マーティンの答えは良いですが、少しあいまいです。コマンドは常にフォークおよび実行されますが、通常のシェルの動作は、コマンドが終了するまで待機することです。アンパサンドはそれをバックグラウンドに置くので、ターミナルプロンプトが戻され、他のことができるようになります。プロセスがデータをstdoutまたはstderrに吐き出す場合、これはプロンプトで実行していることと混合され、混乱する可能性があります。>&/path/to/logfile.txtでリダイレクトするのはこのためです。
George2への応答として、終了するシェルの通常の動作は、SIGHUPシグナルを同じプロセスグループ内のすべてのプロセス(本質的に生成したもの)に送信することで、通常は終了します。シェルプロセスを閉じてもこれを続行したい場合は、nohupコマンドを使用して、このシグナルを無視して実行し続けることができます。このタイプのプロセスには特別な名前があり、デーモンプロセスと呼ばれます(「デーモン」と発音します)。