標準出力抑制

標準出力抑制

これはシェルスクリプトの私のコマンドです。すべての出力を標準ログファイルにリダイレクトしたいと思います。ディレクトリまたはサブディレクトリを含む* .txtファイルが見つからない場合は、std出力画面にo / pを書き込むことを除いて、優れた作業を行います。これを抑制してログファイルに送信するにはどうすればよいですか?

TOTALFILES=`ls $SOURCEDIR/$SOURCESUBDIR/*.txt| wc -l` >> $WORKDIR/$LOGFNAME

ベストアンサー1

それ確かに「標準出力にo/pを書く」。stderrまた、ファイルに標準出力も書きません。コマンド置換を使用すると、stdoutを変数に書き込むように指示しますTOTALFILES

出力を変数とファイルの両方に移動するには、以下を使用する必要がありますtee

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt | wc -l | tee "${workdir}/${logfname}")

ただし、これはstderrをログファイルに送信せず、次のことができます。

totalfiles=$(ls "${sourcedir}/${sourcesubdir}/"*.txt 2>"${workdir}/${logfname}" | wc -l | tee "${workdir}/${logfname}")

stdinはfd0
stdoutはfd1
stderrはfd2

標準出力リダイレクト:

foo > /path/file

これは次のとおりです。

foo 1> /path/file

標準エラーリダイレクト:

foo 2> /path/file

両方ともリダイレクトするには:

foo > /path/file 2>&1

リダイレクトの順序が重要です。

読む: 3.6 リダイレクト


&>Bashを使用すると、次のコマンドを使用してこの時間を短縮することもできます。

foo &> /path/file

(変数名を大文字として使用しないでください。代わりに、すべての変数を引用して$( ... )バックティックを使用する必要があります。

おすすめ記事