こんにちは私は特有の問題を抱えており、私は難しいと思っています。(解決策は意図しています)解決策があります。パイプコマンド "stderr"コマンドにFind
$> find ./subdirectory -type f 2>>error.log
私はエラーを取得し、何かのように、「見つける:./subdirectory/noideaを:アクセス許可が拒否されました」このコマンドから、これはerror.logににリダイレクトされます。
方法はあります私はできパイプのerror.logにリダイレクトする前に、別のコマンドへstderrを?私はに
私はパイプにしたい$> find ./subdirectory -type f 2 | sed "s#\(.*\)#${PWD}\1#" >> error.log
のみstderrのような何かを行うことができるようにしたい
は sedコマンドとfindコマンドエラーの全体のパスを取得します。
私は配管がここでは機能しないと知っていますが、おそらく正しい方法ではありません。
私の問題は、私はSTDOUTとstderrのの両方を必要とし、両者が同時に異なるものを通して処理する必要があります。
編集: 私の問題を少し修正。今
、私はこのシェルスクリプトでは、solve_problem.sh
をシェルスクリプトを持って、私は次のコード
ErrorFile="error.log"
for directories in `find ./subdirectory -type f 2>> $ErrorFile`
do
field1=`echo $directories | cut -d/-f2`
field2=`echo $directories | cut -d/-f3`
done
同じ問題が、シェルスクリプトの内部を持っています。 "find:./subdirectory/noidea:Permission denied"エラーは、$ ErrorFileとstdoutに変数$ディレクトリが割り当てられるはずです。
これは便利なテクニックですが、注意が必要です。特に、findはstdoutに "STDERR:"と書かれていて、findのstdoutはstderrに "STDOUT:"という接頭辞が付いたエラーメッセージが表示されます。 –
@kupson:本当に便利な解決策です。しかし私はそれが私のシナリオではうまくいくかどうかはわかりません。 私は '(find ./subdirectory/ -type f)3>&2 2>&1 1>&3 |のようなものを試しました。 ?\(find:\)\(。* \)?\ 1 $ {PWD}/\ 2? >> $ ErrorFile'しかし、これは私のためには機能しませんでした。エラーはログファイルにリダイレクトされますが、_stdout_はforループの変数に割り当てられません。私は問題を更新しました。 – latestVersion
@latestVersionこの状況ではwhileループを使用します。 – kupson