gpt4 book ai didi

perl - 如何找出执行我的 Perl 脚本的脚本、程序或 shell?

转载 作者:行者123 更新时间:2023-12-04 10:56:03 27 4
gpt4 key购买 nike

如何确定执行我的 Perl 脚本的脚本、程序或 shell?

示例:如果从 shell 执行(为每种类型的 shell 定制),我可能想要人类可读的输出,如果从另一个 perl 脚本作为脚本调用,我可能想要一种不同类型的输出,如果从诸如持续集成服务器。

动机:我有一个工具可以根据哪个 shell 执行它来改变它的输出。我通常会将此行为作为脚本的一个选项来实现,但此工具的设计不允许选项。其他 shell 具有指示正在运行的 shell 的环境变量。我正在开发一个支持 Powershell 的补丁,它没有这样的特殊变量。

编辑:其中许多答案恰好是特定于 linux 的。不幸的是,Powershell 适用于 Windows。 getppid , $ENV{SHELL}变量,并输出到 ps在这种情况下无济于事。该脚本需要跨平台运行。

最佳答案

您使用 getppid() .将此片段放入 child.pl :

my $ppid = getppid();
system("ps --no-headers $ppid");

如果从命令行运行它, system将显示 bash或类似的(除其他外)。使用 system("perl child.pl"); 执行它在另一个脚本中,例如 parent.pl , 你会看到 perl parent.pl执行它。

要使用参数仅捕获进程的名称(感谢 ikegami 提供正确的 ps 语法):
my $ppid = getppid();
my $ps = `ps --no-headers -o cmd $ppid`;
chomp $ps;

编辑:这种方法的替代方法可能是为您的脚本创建软链接(soft link),使不同的上下文使用不同的链接来访问您的脚本并检查 $0围绕它建立逻辑。

关于perl - 如何找出执行我的 Perl 脚本的脚本、程序或 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8538874/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com