我有一个Perl脚本,我想使用system()调用一些shell程序,并可能动态地对程序的输出进行后处理。
在powershell中,我可以运行更多,tee,grep和其他东西,而无需指定可执行文件的完整路径。 我不明白为什么以下失败
C:\Users\xxxwork> perl -W -e "system 'more foo.log | tee bar.txt'"
'tee' is not recognized as an internal or external command,
operable program or batch file.
以下工作, C:\ Users \用户xxxwork> perl -W -e“system”more foo.log | grep -e failed'“
直接打电话给工作
C:\Users\xxxwork> tee
cmdlet Tee-Object at command pipeline position 1
Supply values for the following parameters:
FilePath:
我已经尝试用“Tee-Object”替换tee,但我得到了相同的结果。是否有任何额外的环境变量需要在这个特定情况下设置Perl才能看到shell看到的完整$ Path? 这只是因为在一种情况下,grep是一个纯粹的应用程序,而在另一种情况下,tee是shell实用程序吗?
PS C:\Users\xxxwork> get-command Tee-Object
CommandType Name ModuleName
----------- ---- ----------
Cmdlet Tee-Object Microsoft.PowerShell.Utility
PS C:\Users\xxxwork> get-command grep
CommandType Name ModuleName
----------- ---- ----------
Application grep.exe
由于 ģ
答案 0 :(得分:1)
system
有两个目的。它可用于启动程序:
system($program, @args_to_program)
或者它可用于执行shell命令:
system($shell_command)
后者基本上等同于
system('cmd', '/x', '/c', $shell_command)
从powershell /?
,我们看到可以指示使用-Command
参数执行命令,因此powershell
的等价物将是
system('powershell', '-Command', $powershell_command)