在下面的命令中,cat接受了here-doc的内容,并将其重定向到名为conf的文件:
cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF如何理解这里的命令顺序?bash是否首先处理其他所有内容(这里是-doc部分),作为最后一步,它看起来是> conf部分吗?
发布于 2015-07-02 16:25:46
这里-文件是一种shell重定向,因此shell将以正常的重定向方式执行,从开始到结束(或从左到右,或从外观顺序)。POSIX对此进行了定义:
如果使用命令指定了多个重定向运算符,则计算顺序从头到尾。
在您的命令中,cat将首先执行> conf,打开和截断用于写入的conf文件,然后从Here-Document读取数据。
使用strace,您可以验证它:
$ strace -f -e trace=open,dup2 sh -c 'cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF
'
...
open("conf", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3
dup2(3, 1) = 1
dup2(3, 0) = 0
...发布于 2015-07-02 16:25:03
当bash创建运行cat的进程时,它打开conf对文件描述符1进行写入,并在对程序执行exec之前打开一个临时文件(用于这里的文档),用于读取文件描述符0。在这种情况下,这些操作发生的顺序并不重要。
当重新分配文件描述符(例如使用2>&1 )时,Order确实变得非常重要。
https://unix.stackexchange.com/questions/213574
复制相似问题