Shell 重定向 - 对话框

Shell redirection - dialog

我无法解释代码blow

exec 3>&1
INTERFACE=`echo $DIALOG_TAGS | xargs dialog --title 'Test' --menu ' Text comes here :' 0 0 0 2>&1 1>&3`
exec 3>&-
: > $TMPDIR/._tmp.conf

我的问题是; FD#3 使用 exec 3>&1 创建并重定向到 FD#1 所在的位置。在第二行,我们有 2>&1 1>&3 这让我很困惑。

另一部分是最后一行,其中 :> 重定向发生。

任何解释将不胜感激! 谢谢

exec 3>&1

创建 FD #3,写入 FD #1 (stdout)。

INTERFACE=`echo $DIALOG_TAGS | xargs dialog --title 'Test' --menu ' Text comes here :' 0 0 0 2>&1 1>&3`

backtics中的命令被执行。 (在本例中,dialog 菜单显示 DIALOG_TAGS 中定义的标签/项目对。)

FD #2 (stderr) 被重定向到 FD #1(stdout,由于反引号,它被分配给 INTERFACE)。 FD #1 (stdout) 被重定向到 FD #3。

思路如下:

  • dialog 显示一个菜单,您可以从中 select 一个项目。显然,菜单需要 stdout 才能写入。默认情况下,菜单中的 result (selection) 写入 stderr.
  • 作者想要捕获结果,因此他将stderr重定向到&1,所以结果在INTERFACE中结束。
  • 但是他想要结果,而不是整个菜单...所以他没有捕获菜单结果,而是重定向 菜单 (stdout) 到先前创建的 stdoutcopy,只留下 result 被发送到 FD #1,因此存储在 INTERFACE 中,而菜单正在通过 FD #3 显示(它仍然指向终端,不管反引号如何) .

完成后...

exec 3>&-

FD #3 已关闭,因为不再需要它。


: > $TMPDIR/._tmp.conf

这个,我看不懂。冒号是一个内置命令,除了参数扩展和重定向之外什么都不做。它创建一个空文件...?也许是为了向其他程序表明 selection 已生成...?或者保留时间戳...?不知道。