4

几个月前我写了这个脚本,现在重读它,我无法破译这行的意思:

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

我找不到对文件描述符 3 的任何特殊处理sudorsynctee. 在重定向之后,我目前猜测是这种情况:

now fd points to old fd
     0    -->         0
     1    -->         2
     2    -->         1
     3    -->         1
  • 这些重定向是应用于sudo,还是应用于rsync,以及用于什么目的?
  • 文件描述符 3 是否未关闭或以任何“坏”方式挂起?
4

2 回答 2

1

Note that the dangling file descriptor 3 can be closed with 3>&-, here's the full line with that included:

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 回答
1

你的猜测是对的。交换标准输出和标准错误是一个相当不错的技巧。要回答您的问题:

  • 这些重定向由 shell 捕获,因此它们适用于管道的该部分(即sudo)。该sudo进程本身将检测所有参数并将它们传递给它的子命令(rsync),但重定向已被捕获并在此之前采取行动:sudo永远不会看到它们。
  • 文件句柄 3 未悬空。进程结束时将关闭。
于 2011-02-16T03:44:15.100 回答