我几个月前写过这个剧本,现在重读它,我无法破译这句话的意思:
sudo rsync -xPRSaz --rsync-path='sudo rsync' maeve@macbook:/ macbook/ 3>&1 1>&2 2>&3 | tee macbook.log
我找不到sudo
,rsync
或tee
的文件描述符3的任何特殊处理。重定向后,我正在猜测这种情况:
now fd points to old fd
0 --> 0
1 --> 2
2 --> 1
3 --> 1
sudo
,还是rsync
,以及结束?答案 0 :(得分:1)
你的猜测是正确的。交换标准输出和标准错误是一个相当漂亮的技巧。回答你的问题:
sudo
)。 sudo
进程本身将检测所有参数并将它们传递给它的子命令(rsync
),但重定向已被捕获并在该点之前采取行动:sudo
永远不会看到它们。 / LI>
答案 1 :(得分:1)
请注意,悬挂文件描述符3
可以使用3>&-
关闭,这里包含了完整的一行:
sudo rsync -xPRSaz --rsync-path='sudo rsync' maeve@macbook:/ macbook/ 3>&1 1>&2 \
2>&3 3>&- | tee macbook.log