system() を使用していくつかのシェル プログラムを呼び出し、場合によってはその場でプログラムの出力を後処理したい Perl スクリプトがあります。
PowerShell 内から、実行可能ファイルへのフル パスを指定せずに、more、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'"
tee への直接呼び出しが機能します
C:\Users\xxxwork> tee
cmdlet Tee-Object at command pipeline position 1
Supply values for the following parameters:
FilePath:
「Tee-Object」からいっぱいになったティーを置き換えてみましたが、同じ結果が得られます。Perl がシェルから見た完全な $Path を見るために、この特定のケースで設定する必要がある追加の環境変数はありますか? これは単に、grep が純粋なアプリケーションである場合と、tee がシェル ユーティリティである場合があるためですか?
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
ありがとうG