Perl 6的shell()使用哪个shell?

时间:2018-04-25 19:25:16

标签: shell perl6 raku

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 ,但记录的答案会很好。

2 个答案:

答案 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