输出终端重定向到 zenity

输出终端重定向到 zenity

让我们解释一下我的疑问。
我们都知道这>&是 shell 语法,表示“将一个文件描述符折叠到另一个文件描述符中”。
2>&1意味着我想将 stderr 重定向到 stdin,这很简单明了 :)
我不明白的是这个(让我们用一个例子来解释一下)

ncftpput -u $user -p $pass $host $remote_dir $local_file | zenity --text-info --title "Putting files..." --width 600 --height 300

上面的代码不起作用......但是这个可以完美地工作:

ncftpput -u $user -p $pass $host $remote_dir $local_file 2>&1 | zenity --text-info --title "Putting files..." --width 600 --height 300

我不明白为什么如果我将2>&1重定向放到 zenity 中,它就会起作用,而如果我不写2>&1重定向,它就不起作用。为什么?

答案1

按照惯例,应用程序在两个文件描述符上生成输出:1 ( stdout) 和 2 ( stderr)。shell 的管道功能将stdout一个进程的 重定向到stdin另一个进程的 。这样,应用程序可以将错误或状态消息从其正常输出中分离出来,并且在通过管道传输其输出时仍然可用。

似乎您要通过管道传输的输出正在zenity发送到stderr。在第二个命令行中,该2>&1部分表示将所有输出重定向ncftpput到。这会导致它通过管道传输到。stderrstdoutzenity

相关内容