0

シェルスクリプトを作成しようとしていますが、実際には、変数$outputがいっぱいになった場合に出力を変更したいと考えています。コマンド内で変数をチェックすることを考えていましたifが、それが正しい構文かどうかわかりません。以下に例を示します (もちろん、これは機能しません)。

ls -リサ | awk '$5 == 所有' 所有="$所有者" | sort -k$column -n if [ $output ]; 次に印刷> out.txt fi

そのように機能するかどうか、可能かどうかはわかりません。

4

2 に答える 2

1

exec ビルトインは、実行中の残りのシェル スクリプトのデフォルトの標準出力を変更できます。したがって、この場合、次のようにします。

if [ -n "$output" ]; then
    exec >out.txt
fi
ls -lisa | awk '$5 == own' own="$owner" | sort -k$column

あなたが awk の部分で何をしようとしているのか完全にはわからないので、これはあなたの質問からそのままです。

もう 1 つのオプションは、リダイレクトするスクリプトの部分を関数に配置し、2 つの方法のいずれかで関数を呼び出して、出力をリダイレクトすることです。例:

do_work() {
    ls -lisa | awk '$5 == own' own="$owner" | sort -k$column
}
if [ -n "$output" ]; then
    do_work >out.txt
else
    do_work
fi
于 2013-03-17T02:59:39.643 に答える
1

これを行うには、シェルの「デフォルト値を使用」オプション ( ${variable:-default}、デフォルトとして /dev/stdout を使用) を使用できます。

ls -lisa | awk '$5 == own' own="$owner" | sort -k$column -n > "${output:-/dev/stdout}"
于 2013-03-17T05:57:32.523 に答える