在此处文档之后的重定向是如何工作的?


ftp -v -n <<! > /tmp/ftp$$ 2>&1
open $TARGET_HOST
user $TARGET_USER $TARGET_PWORD
binary
cd $TARGET_PUT_DIR
put $RESULTS_OUT_DIR/$FILE $FILE
bye
!

我明白<<!是一个"此处文档"并将命令传递给FTP,直到到达分隔符"!"但是我似乎无法理解这个重定向:

> /tmp/ftp$$ 2>&1
谁能解释一下这里发生了什么?

首先,可以将heredoc列在最后而不影响将要发生的事情。Heredocs通常写在最后,但<<NAME,但实际上可以写在命令的任何地方。<<相对于两次>重定向的顺序并不重要,因为前者改变了stdin,后者改变了stdout和stderr。

如果这样写会更清楚:

ftp -v -n > /tmp/ftp$$ 2>&1 <<!
...
!
第二,解释输出重定向:
  • > /tmp/ftp$$将stdout重定向到一个名为/tmp/ftp1234的文件,其中1234是当前shell进程的PID。这是一种使用相对唯一的名称创建临时文件的特殊方法。如果shell脚本并行运行几次,每次拷贝都会写入不同的临时文件。

  • 2>&1重定向stderr (fd 2)到stdout (fd 1),也就是说,它向同一个文件/tmp/ftp$$发送错误消息。

相关内容

  • 没有找到相关文章

最新更新