Какую оболочку использует 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 в любом случае.

Другие вопросы по тегам