在Perl脚本中,我想确定从哪个shell调用我的Perl脚本。动机是我为";模块";,但在调用模块之前,我需要知道将哪个shell作为参数传递给它。如果我提取$ENV{quot;SHELL"},在某些情况下我可以看到它是/bin/tcsh,但当有人从tcsh SHELL调用/bin/bash,然后调用我的Perl包装器(它无法检测到插入的bash SHELL(时,这会失败。局部变量没有帮助,因为它们没有传递。那么,我该如何弄清楚我的Perl脚本是从哪个shell调用的呢?
我需要知道将哪个shell作为参数传递给它
您应该使用什么取决于您的需求。
-
如果您想要用户选择的交互式shell,请使用
$ENV{SHELL}
。这就是这个变量的全部意义。就像
EDITOR
和PAGER
一样,SHELL
用于在执行特定任务的程序中传达用户的偏好。如果他们配置错误,就要靠他们来修复。如果您的用户抱怨使用了错误的shell,您可以记录使用了
SHELL
env-var。您也可以通过在启动shell之前输出类似Starting /bin/tcsh (from $SHELL)
的内容来暗示它。 -
如果要运行shell命令,请使用为其编写命令的shell。
如何弄清楚我的Perl脚本是从哪个shell调用的
所问的问题无法回答,因为它依赖于程序是由shell启动的错误前提。很大一部分进程是由非shell程序创建的。
有一些特定于操作系统的方法可以获得父进程的可执行文件(至少在某些系统上(,但我不会详细介绍这一点,因为缺乏专门性,而且答案的第一部分对此进行了讨论。