![2019年に見つけた24の無料オープンソースアプリケーション](/f/44fa63f3dafbdfd186773b822508eb08.png?width=100&height=100)
最近、シェルスクリプトに取り組んでいて、bashの特殊変数の方法に大きな違いが見られました。 $
と BASHPID
動作します。 毎日 Linuxで実行されているプロセス プロセスが割り当てられます ID これが、オペレーティングシステムがプロセスを処理する方法です。
同様に、bashターミナルセッションにもプロセスIDが割り当てられます。 と呼ばれる特別な変数があります "$"
と 「$ BASHPID」
現在のシェルのプロセスIDを格納します。
先に進み、以下のコマンドを実行して、現在のシェルのプロセスIDを確認します。 両方 "$"
と 「$ BASHPID」
同じ値を返します。
$ echo $$#特殊変数の出力$ $ echo $ BASHPID#変数$ BASHPIDを印刷します。
bashでは、シェルから外部プログラムを呼び出すと、子プロセス/サブシェルが作成され、プログラムは子プロセスでのみ送信されます。 以下の例を参照してください。ここでは、次のスクリプトに単純なプロセス監視コマンドを配置しています。 「sample.sh」 親シェルがプログラムを実行するためのサブシェルを作成する方法を示します。
#!/ usr / bin / env bash ps -ef --forest | grep -ibash。
このスクリプトを実行すると、bashのプロセスIDを取得できます。 下の画像から、スクリプトを呼び出したときにbashが子プロセスを作成し、スクリプトを実行したことがわかります。
$。/ sample.sh。
では、両方を使用しましょう "$"
と 「$ BASHPID」
スクリプト内で、何が返されるかを確認します。
#!/ usr / bin / envbash。 エコー "" ps -ef --forest | grep -ibash。 エコー "" echo "PID USING $ FOR SCRIPT $ 0 ==> $$" echo "スクリプトにBASHPIDを使用するPID $ 0 ==> $ BASHPID" エコー。
ここで、スクリプトを再度実行します。
$。/ sample.sh。
了解しました。同じプロセスIDを返します。 これが実際の違いです。 内部でコマンドを実行して、スクリプト内に別の子プロセスを作成しましょう 括弧()
.
#PIDを変数に格納する…VAR_HASH = $(echo $$) VAR_BASHPID = $(echo $ BASHPID)echo "VALUE OF VAR_HASH ==> $ VAR_HASH" echo "VALUE OF VAR_BASHPID ==> $ VAR_BASHPID"
バッシュでは、 括弧 子プロセスを呼び出し、括弧内にあるものはすべて実行します。 その場合、両方 $
と $ BASHPID
新しい子プロセスIDを保存する必要があります。 しかし、上の画像から、どこに違いがあるかがわかります $
店舗 382 これは親ID(スクリプトのプロセスID)です sample.sh)、 と $ BASHPID
括弧で作成された作成済みの子プロセスIDを格納します。
それでは、この動作を理解してみましょう。 マニュアルページの内容を確認します。
$ manbash。
使用する場合 $
、サブシェル内であっても、作成元の親プロセスのプロセスIDを格納します。 しかし BASHPID
現在のプロセスIDを保存します。つまり、括弧内に呼び出されると、子プロセスIDを保存します。
変数を割り当てたり変更したりすることはできません $
、 しかし BASHPID
再割り当てできますが、効果はありません。
$ $=10. $ BASHPID = 10。 $ echo $ BASHPID。
設定を解除することが可能です BASHPID. 設定を解除すると、特別な状態が失われ、これを正規変数として使用できるようになります。
$未設定のBASHPID。 $ echo $ BASHPID。 $ BASHPID = "Tecmint" $ echo $ BASHPID。
シェルのプロセスIDを割り当てようとしても、シェルはすでに特別な状態を失っているため、ユーザー定義変数として扱われます。
$ BASHPID = $(echo $$) $ echo $$; echo $ BASHPID。
この場合、新しいターミナルセッションを使用する必要があります BASHPID その特別な状態を取得します。
この記事は以上です。 の違いを見てきました $
と BASHPID
そして、この記事でそれらがどのように動作するか。 この記事に目を通し、貴重なフィードバックを私たちと共有してください。