Какую оболочку использует Perl 6 shell()?
Оболочка Perl 6 отправляет команды "оболочке", но не говорит, что это такое. Я постоянно получаю bash на своей машине, но я не знаю, могу ли я положиться на это.
$ perl6 -e 'shell( Q/echo $SHELL/ )'
/bin/bash
$ csh
% perl6 -e 'shell( Q/echo $SHELL/ )'
/bin/bash
% zsh
$ perl6 -e 'shell( Q/echo $SHELL/ )'
/bin/bash
Это достаточно просто в Unix, когда это задокументировано, но как насчет cmd.exe или PowerShell в Windows (или bash, если он установлен)? Я полагаю, что это cmd.exe, но документированный ответ был бы хорош.
1 ответ
Глядя на источник, просто раскудо звонит /bin/sh -c
на не-окнах и использует %*ENV<ComSpec> /c
на окнах.
dash
(установлен как /bin/sh
во многих системах), не устанавливает $SHELL
, да и не должно. $SHELL
не является именем родительского процесса; это имя оболочки, которую следует использовать, когда требуется интерактивная оболочка.
Чтобы получить имя родительского процесса, в некоторых системах можно использовать следующее:
echo "$0"
или
# Command line
perl -e'$ppid=getppid(); @ARGV="/proc/$ppid/cmdline"; CORE::say "".<>'
или
# Program file
perl -e'$ppid=getppid(); CORE::say readlink("/proc/$ppid/exe")'
Вы обнаружите, что получите /bin/sh
в любом случае.