シェルスクリプト行の最後にあるアンパサンドとはどういう意味ですか?


118
sh sys-snap.sh &

なにsh?なにsys-snap.sh&行末に配置する必要があるのはなぜですか?誰でも構文を説明できますか?

&スクリプトがなければ、Ctrl+ を押すまでプロンプトに戻りませんC&Enter キーを押すと機能します。


2
ダブルアンパサンド&&は単一のアンパサンドとは異なり&ますか?
チャーリーパーカー

1
@CharlieParkerその答えを見つけたことがありますか?私は自分で違いを理解しようとしています。(編集:
ネバー

回答:


94

shデフォルトのBourne互換シェル(通常はbashまたはdash)

sys-snap.shsh実行するコマンドを含むシェルスクリプトです。あなたがそのコンテンツを投稿しないので、私はその名前から、それが何をするかを推測することができるだけです。私はスクリプトが始まる場合、現在のすべてのプロセス、現在のメモリ使用量、データベースの状況などのログ・ファイルを作成し、同じファイル名でCPanelのに関連するスクリプト、見つけることができますシェバング行#!/bin/shまたは同様に)、あなたはそれが実行することができますchmod +x sys-snap.shし、使用して直接起動./sys-snap.sh、それは現在のディレクトリにある場合。

では&、プロセスがバックグラウンドで起動するので、あなたは、シェルを使用し続けることができ、スクリプトが終了するまで待つ必要はありません。忘れた場合は、現在実行中のプロセスを停止Ctrl-Zして、バックグラウンドでbg(またはフォアグラウンドでfg)続行 できます。詳細については、ジョブ制御を参照してください


4
sh通常のみ、bashまたはdashLinuxベースのシステム(または最近のOS / X)で。BSDでは、通常Ash(dashはNetBSD shに基づいており、Almquist Shellに基づいています)の別のバリアントまたはpdksh派生物です。市販のUnicesでは、通常はksh88です。
ステファンシャゼル

1
@jofel:以下のスクリプトが実行されていて、誤ってCtrl-Cを実行した場合はどうなりますか。スクリプトは実行されますか、それとも終了しますか?例:sh sys-snap.sh&
フセイン

2
@ Hussain7 Ctrl-Cは、常にフォアグラウンドの現在のプロセスに送信されます。シェルスクリプトが起動さ&れ、バックグラウンドで起動された場合、新しいシェルプロンプトのみが表示されます。
ジョフェル

2
ダブルアンパサンド&&は単一のアンパサンドとは異なり&ますか?
チャーリーパーカー

7
@CharlieParkerはい、「&&」は「and」関数です。&&の後のコマンドは、前のコマンドが成功した場合にのみ呼び出されます。例「true && echo works」出力「
workes

87

これはjob controlunix として知られています。&バックグラウンドでコマンドを置くためにシェルを通知します。これは、sys-snap.shコマンドを実行し続けますが、シェルに戻り、並列コマンドの実行を継続できることを意味します。

jobsコマンドで現在実行中のジョブのリストを表示できます。コマンドを使用して、コマンドに戻る(「フォアグラウンド」にする)ことができfgます。どのバックあなたは、プロンプトが表示されませんし、あなたが発行する必要があり状態にコマンドを引っ張るCtrl- Cために殺すのプロセスを。ただし、そのプロセスを中断(一時停止)して、Ctrl-を発行できZます。これは一時停止sys-snap.shし、プロンプトに戻ります。あなたはそれは(あなたがそれを発行したかのような背景できる&して)bgコマンド、およびそれがされます再開、そこから実行している状態一時停止していますCtrl- Zに入れていました。

一度に複数のジョブを持つことができることに注意してください(で示されているようにjobs):

[1]-  Running          sys-snap.sh &
[2]+  Running          another-script.sh &

あなたは自分のジョブ番号を使用してそれらを背景と前景ができ、%1なりますsys-snap.sh%2なりますanother-script.sh。引数を使用するfgbg、引数を使用しない場合+jobs上記の出力でマークされたジョブに対してコマンドが実行されます。

fg %1

バックグラウンドにsys-snap.sh残したまま、フォアグラウンドに戻りanother-script.shます。

あなたが発行できるCtrl- Cとそれらを前面にせずにジョブを実行する一連killのコマンドを、kill %1同等のものをお送りしますCtrl- Csys-snap.sh

bashシェルを使用している場合、man bashコマンドには「JOB CONTROL」という見出しのセクションの下に詳細なセクションがあります。

の名前についてはsys-snap.sh、Unixではファイル名は任意です(ダイナミックローダーファイルなどの例外がいくつかあります)。彼らのような他のコマンドを呼び出す、それらをシェルスクリプトとして実行するために特定のファイルextentionsを持っているための要件はないperlか、php通常、明確さを提供するために使用されるなど、このインスタンスでは、それがあることを、.shBourneシェルを使用してシェルスクリプト/bin/sh

sys-snap.shlessコマンドのようなもので内容を見るとき)の機能部分はShebangです。最初の行には、おそらく次のいずれかがあります。

#! /bin/sh
#! /bin/bash
#! /usr/local/bin/bash

または類似。基本的な用語では、#!(などの/bin/sh)コマンドが実行され、スクリプトファイルの残りの内容が一度に1行ずつフィードされます。chmodコマンドとして実行できるように、ファイルも実行可能に設定する必要があることに注意してください。アクセス許可が設定されていない場合、shebangエラーが発生するため、効果はありません。

bash: sys-snap.sh: command not found

または、明示的なパス./sys-snap.sh.現在の作業ディレクトリを意味する)で実行した場合、次のようになります。

bash: ./sys-snap.sh: Permission denied

他の代替方法は、実行許可なしでそれを残し、明示的に/ bin / shに実行を依頼することです:

/bin/sh sys-snap.sh &

3
これは素晴らしい答えです。可能な提案の1つnohupは、追加することもあります。これは&、プロセスを開始するためにしばしば使用され、プロセスを強制終了せずにプロセスを起動したシェルを強制終了できるためです。
トミー

@Drav、それは本当jobsですか?その最初のコマンドの場合、それは常に空を返しますか?
パセリエ

&コマンドの最後で使用するのは、コマンドまたはスクリプトがバックグラウンドで実行されているがに書き込みを行うことを意味するstdinstdoutまたはではなくstderr)デタッチするだけstdoutでありCtrl + c、出力を停止しないが、コマンドを入力します。これは、バックグラウンドプロセスが書き込みをstdout行っているが、フォアグラウンドで実行されていないため停止できないためです。詳細はこちら
vadasambar

4

shシェルです。どのシェルがシステムに正確に依存します。bash標準シェルとして使用するシステムの例:

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 13 16:12 /bin/sh -> bash

$ sh --version
GNU bash, version 4.2.45(1)-release (x86_64-pc-linux-gnu)

sys-snap.sh何らかの種類のシェルスクリプトにsh sys-snap.shなるため、シェルスクリプトを実行します。

&シェルプロセスをバックグラウンドで実行します。&それなしでは、スクリプトが終了するまでフォアグラウンドに留まります。スクリプトはどちらの方法でも機能します。スクリプトが終了するのを待つかどうか、またはそれ以降のコマンドを実行する前の問題です。


1

サーバーはhostgatorにありますか?

このスクリプトsys-snap.shは、システムのすべてのログファイルとデータを収集するためにホストゲーターチームによって記述された特別なスクリプトであるため、システム情報の監視と収集にその出力を使用します。


いいえ、hostgatorを使用していません。
user4951

1
@ J.Changスクリプトは、Hostgatorおよび他の数百のホストが使用するcPanelの一部です。
472084

@ 472084、どのcpanelバージョンですか?
パセリエ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.