私のPerlスクリプトを実行したスクリプト、プログラム、またはシェルはどのようにして決められますか?私のPerlスクリプトを実行したスクリプト、プログラム、またはシェルを知るにはどうすればよいですか?
例:シェルから実行すると人間の目に見える出力(シェルの種類ごとにカスタマイズ)、別のperlスクリプトからスクリプトとして呼び出された場合の出力の種類、および実行された場合の機械可読形式継続的な統合サーバーなどのプログラム
動機づけ:どのシェルがそれを実行するかに基づいて出力を変更するツールがあります。私は通常、この動作をスクリプトのオプションとして実装しますが、このツールの設計ではオプションが許可されていません。他のシェルには、実行中のシェルを示す環境変数があります。私はPowershellをサポートするためのパッチに取り組んでいますが、これには特別な変数はありません。
編集:これらの回答の多くは、Linux固有のものです。 Unfortuantely、PowershellはWindows用です。 getppid
、$ENV{SHELL}
という変数があり、この場合はps
に逃げることはできません。このスクリプトはクロスプラットフォームで実行する必要があります。
私は理解していません - あなたはその場合親プロセスを見てはいけませんか? – x0n
STDOUTがターミナル( '-t')であるかどうかを調べることができます。そうであれば、連続的な統合デーモンではなく、インタラクティブシェルから呼び出されたものとみなします。しかし、この共通のテクニックは、個別の可能性のある親の出力をカスタマイズすることについては言及していませんが(とにかく、間違った欲求があると思います)。 – pilcrow
忘れてしまいましたが、通常、シェルが実行中のシェルを示すためにシェルまたはユーザーが設定する環境変数を探します。 Powershellでは、そのような環境変数はありません。 –