スクリプトが対話型シェルまたは他のスクリプトによって呼び出されるかどうかを確認するにはどうすればよいですか?

スクリプトが対話型シェルまたは他のスクリプトによって呼び出されるかどうかを確認するにはどうすればよいですか?

スクリプトで決定するのはとても簡単です。実行中のコードが対話型シェルで実行されていません。しかし、スクリプトを書くときはすでに知っているので、関数の内部以外の目的で使用されるかどうかはわかりません(またはスクリプトを取得する場合)。

スクリプトからスクリプトが走る対話型シェルですか、それとも別のスクリプトで実行されますか?つまり、相互作用性をどのように決定しますか?発信者、招集者台本から?つまり、どうすればわかりますか?シェルは対話型ですか?

もっと明確にすると、私はそのようなことを言うつもりはありません。最も近いインタラクティブな祖先の名前を探す、私はちょうど調べたいだけです。もしこれ即時親は相互作用しますか?

これがシェルによって異なる場合、私はzshに最も興味がありますが、bashにも興味があります。

ベストアンサー1

スクリプトがで始まると、#!/pathカーネルは関連付けられていない新しいシェルを起動します。

スクリプトにシェルコマンドのみが含まれている場合、シェルは分岐してエラーを受け取り、ENOEXECすべてのフラグをデフォルト値にリセットし、分岐したサブプロセスがスクリプトを実行します。

したがって、getppid()のようなものを使用してプロセステーブルを確認しない限り、これはできません。

おすすめ記事