关于https://stackoverflow.com/questions/23937389/determine-parent-shell-from-perl/25139489

关于https://stackoverflow.com/questions/23937389/determine-parent-shell-from-perl/25139489,perl,Perl,有人在cygwin上试过这个代码吗 我发现以下错误: 在-e第1行的EOF之前的任何位置都找不到字符串终止符“'”。 在./dos_it.pl第506行的模式匹配(m/)中使用未初始化的值。 在位于./dos_it.pl第586行的rindex中使用未初始化值$shellpath。 在./dos_it.pl第586行的substr中使用未初始化值$shellpath。 在./dos_it.pl第761行的串联(.)或字符串中使用未初始化的值$pathtosell。 在./dos_it.pl第76

有人在cygwin上试过这个代码吗

我发现以下错误:

在-e第1行的EOF之前的任何位置都找不到字符串终止符“'”。
在./dos_it.pl第506行的模式匹配(m/)中使用未初始化的值。
在位于./dos_it.pl第586行的rindex中使用未初始化值$shellpath。
在./dos_it.pl第586行的substr中使用未初始化值$shellpath。
在./dos_it.pl第761行的串联(.)或字符串中使用未初始化的值$pathtosell。
在./dos_it.pl第761行的串联(.)或字符串中使用未初始化值$shell_一致性。
生成的字符串为:

$ps-ef | perl-ane'1..1和/^(.*)CO?MM?A?N?D/和$s=长度$1;s/^.{$s}/;打印“@F[1,2]$"”
Perl版本:

$perl-v
这是Perl5,版本26,Subversion2(v5.26.2),为MSWin32-x64多线程构建

这是用于Bourne shell(
sh
)或类似程序的命令,但您将其交给Windows shell(
cmd
)执行。使用
sh
或类似工具(无论是cygwin内置还是其他)执行命令以消除错误


顺便说一下,您使用的是Perl的Windows版本(
MSWin32-x64
arch),而不是Perl的cygwin版本(
cygwin
arch)。这不是错误的原因,因为无论哪种方式,程序都可以正常运行。也就是说,一旦您使用cygwin内置的
sh
或类似工具来执行命令,这个“问题”肯定会消失。

很可能您是在
cmd.exe
下运行oneliner,而不是在cygwin shell下运行。这很容易解释错误消息,因为Perl永远不会在与sh兼容的shell下看到一个引号。我既没有在DOS cmd窗口中运行它,也没有在Powershell中运行它。因此,sub命令实际上是在生成一个DOS cmd shell??进一步研究后,PERL5SHELL控制Perl用于执行backtick命令的内容。其默认值为cmd.exe。因此,我需要确保它被设置为cygwin的Bash值,或者确保使用cygwin的Perl构建