Perl 6'} shell向" shell发送命令"但是没有说出那是什么。我一直在我的机器上获得 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上记录时,这很容易,但在Windows上如果是 cmd.exe 或PowerShell(或者如果已经安装了bash)?我认为它是 cmd.exe ,但记录的答案会很好。
答案 0 :(得分:6)
查看the source,rakudo只会在非Windows上调用/bin/sh -c
并在Windows上使用%*ENV<ComSpec> /c
。
答案 1 :(得分:2)
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
。