14

Linuxで出力をリダイレクトする方法を知っています。つまり、bashスクリプトに大量の出力があり、次のようなものを入力したくないということです。

echo $foo >> bar

何度も何度も。私はむしろ次のようなことをしたいと思います:

hey, bash, for the time being put all your STDOUT in "bar"
echo $foo
.
.
OK, bash, you can go back to regular STDOUT now

FD1をファイルとして開いてみました。

exec 1>bar

しかし、私が終わったとき、STDOUTを通常に戻すことができませんでした。ファイルを閉じる

exec 1>&-

回避できないエラーが発生しました。

これを行う方法はありますか?ありがとう!

4

3 に答える 3

21

最初にstdoutを保存する必要があります(たとえば、fd#4にリンクすることによって)

exec 4 <&1

stdoutをリダイレクトする

exec 1> bar

保存した標準を復元します

exec 1 <&4

于 2012-11-05T19:19:58.053 に答える
8

やりたいことを行うにはいくつかの方法がありますが、おそらく最も簡単なのはサブシェルまたはコマンドグループです。

( some
  commands
  you
  want
  to
  redirect ) >> logfile

コンストラクトは( ... )サブシェルです。使用{ ... }はコマンドのグループであるため、わずかに軽量です。どちらを優先するかは、グループ内で割り当てられた変数を後で保持するかどうかによって異なりますが、主に他にもいくつかの違いがあります...

于 2012-11-05T19:13:41.130 に答える