4

私は数ヶ月前にこのスクリプトを書きましたが、今それを読み直すと、この行の意味を理解できません。

sudo rsync -xPRSaz --rsync-path='sudo rsync' maeve@macbook:/ macbook/ 3>&1 1>&2 2>&3 | tee macbook.log

sudorsyncまたはのファイル記述子3の特別な扱いが見つかりませんtee。リダイレクト後、私は現在これが状況であると推測しています:

now fd points to old fd
     0    -->         0
     1    -->         2
     2    -->         1
     3    -->         1
  • これらのリダイレクトはsudo、またはに適用されrsyncますか、そして何に適用されますか?
  • ファイル記述子3が閉じられていないか、「悪い」方法でぶら下がっていませんか?
4

2 に答える 2

1

あなたの推測は正しいです。標準出力と標準エラーを入れ替えるのはかなり気の利いたトリックです。あなたの質問に答えるには:

  • これらのリダイレクトはシェルによってキャプチャされるため、パイプラインのその部分()に適用されますsudosudoプロセス自体がすべての引数を検出し、それらをサブコマンド(rsync)に渡しますが、リダイレクトはその時点より前にキャプチャされ、実行されています。引数は表示されsudoません。
  • ファイルハンドル3はぶら下がっていません。プロセスが終了すると閉じられます。
于 2011-02-16T03:44:15.100 に答える
1

ぶら下がっているファイル記述子3はで閉じることができることに注意してください。これ3>&-が含まれている完全な行です。

sudo rsync -xPRSaz --rsync-path='sudo rsync' maeve@macbook:/ macbook/ 3>&1 1>&2 \
2>&3 3>&- | tee macbook.log
于 2011-02-21T14:19:26.293 に答える