引数が与えられたらファイルに出力し、そうでなければstdoutに出力する簡潔な方法

引数が与えられたらファイルに出力し、そうでなければstdoutに出力する簡潔な方法

ファイル名を引数として取得しない限り、私のスクリプトがstdoutとして出力されることを望みます。明らかなアプローチは次のとおりです。

if [ -e "$1" ]; then
  command_with_output >$1
else
  command_with_output
fi

非常に醜くて反復的なので、これを行うためのよりきれいな方法が欲しいです。

以下を試しましたが、動作しません。

[ -e "$1" ] && outfile=$1 || outfile='&1'
command_with_output >$outfile

編集:これは答えの関連性を変えませんが、ファイルがまだ存在していない可能性があるためではなく、touch "$1" && outfile=$1実際に必要なものであることを質問した後に気づきました。[ -e "$1" ] && outfile=$1それは存在自体ではありません。回答が同期されない可能性があるため、質問を変更しないでください。

ベストアンサー1

exec現在のスクリプトの標準出力を別のファイルにリダイレクトするために使用できます。

[ -e "$1" ] && exec > $1
command_with_output

おすすめ記事