Как мне узнать, какой сценарий, программа или оболочка выполнили мой сценарий Perl?

Как мне определить, какой сценарий, программа или оболочка выполнили мой сценарий Perl?

Пример: я мог бы захотеть иметь удобочитаемый вывод при выполнении из оболочки (настраиваемый для каждого типа оболочки), другой тип вывода, если он вызывается как сценарий из другого сценария perl, и машиночитаемый формат, если выполняется из программа, такая как сервер непрерывной интеграции.

Мотивация: у меня есть инструмент, который меняет свой вывод в зависимости от того, какая оболочка его выполняет. Обычно я бы реализовал это поведение как опцию скрипта, но конструкция этого инструмента не допускает опций. В других оболочках есть переменные среды, указывающие, какая оболочка запущена. Я работаю над патчем для поддержки Powershell, в котором нет такой специальной переменной.

Изменить: Многие из этих ответов зависят от Linux. К сожалению, Powershell предназначен для Windows. getppid , переменная $ ENV {SHELL} и обработка ps в этом случае не помогут. Этот скрипт должен работать на разных платформах.

7
задан Robert P 16 December 2011 в 21:24
поделиться