我有一個Perl腳本,我想用system()調用一些shell程序,並可能在後臺處理程序的輸出。shell實用程序在perl系統中不工作()調用
從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:\用戶\ xxxwork> perl的-W -e 「系統 '更foo.log | grep的-e失敗'」
以發球直接調用工作
C:\Users\xxxwork> tee
cmdlet Tee-Object at command pipeline position 1
Supply values for the following parameters:
FilePath:
我曾嘗試更換三通通過它從「三通對象」滿,但我得到了相同的結果。是否有任何額外的環境變量需要在這種特定的情況下設置爲讓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
由於 ģ
什麼是「shell工具」? 'system'運行'cmd.exe',而不是Powershell。 – choroba
@choroba說什麼。此外,你究竟想要達到什麼目的?在PowerShell中的Perl內部運行'more' /'tee'完全沒有意義。 Perl和PowerShell都可以完成幾乎所有你可以用shell命令完成的任務,而且你完全不需要兩者。 –
看來這是真正的問題**系統()**運行** cmd.exe **而不是** Powershell **。有沒有一種簡單的方法來強制** system()**使用** Powershell **?我已經嘗試過'system(「powershell'mycommands'」),但它現在可以工作。 – guytout