bash 3.2.57で$!のプロセスIDを取得できません。

bash 3.2.57で$!のプロセスIDを取得できません。

Bash 4.2.46がインストールされているリモートサーバーでは、次のことができます。

$ sleep 100 & pid=$!; echo "$pid"; wait "$pid"
[3] 7646
7646

しかし、bash 3.2.57がインストールされているMacでは動作しません。

$ sleep 100 & pid=$!; echo "$pid"; wait "$pid"
-bash: !: event not found

どうしたの?どういうわけか私は何年もmacOSを使用してきましたが、これまで何も起こりませんでした...しかし、誓うと、バックグラウンドプロセスのプロセスIDを取得するbash正確な方法を実行する多くのシェルプログラムを実行しました。$!壊れる。

ベストアンサー1

!トリガーキャラクターです歴史的拡張、対話型シェルでデフォルトで有効になっています。

あなたのpid=$!;場合、私はecho "$!"トリガーしますが、3.2はこの点で少し愚かです。!foofoo$!"!"

動作しているように見えるのは、pid=$! ;セミコロンの前にスペースがあることです。または、履歴無効化拡張を使用することもできますset +H。 (知っている"$!" いいえ3.2で動作します。 )

おすすめ記事