Как мне определить, какой сценарий, программа или оболочка выполнили мой сценарий Perl?
Пример: я мог бы захотеть иметь удобочитаемый вывод при выполнении из оболочки (настраиваемый для каждого типа оболочки), другой тип вывода, если он вызывается как сценарий из другого сценария perl, и машиночитаемый формат, если выполняется из программа, такая как сервер непрерывной интеграции.
Мотивация: у меня есть инструмент, который меняет свой вывод в зависимости от того, какая оболочка его выполняет. Обычно я бы реализовал это поведение как опцию скрипта, но конструкция этого инструмента не допускает опций. В других оболочках есть переменные среды, указывающие, какая оболочка запущена. Я работаю над патчем для поддержки Powershell, в котором нет такой специальной переменной.
Изменить: Многие из этих ответов зависят от Linux. К сожалению, Powershell предназначен для Windows. getppid
, переменная $ ENV {SHELL}
и обработка ps
в этом случае не помогут. Этот скрипт должен работать на разных платформах.