0

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

4

1 に答える 1