首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解"cat > file_name << blah“命令?

如何理解"cat > file_name << blah“命令?
EN

Unix & Linux用户
提问于 2015-07-02 16:13:17
回答 2查看 5.3K关注 0票数 14

在下面的命令中,cat接受了here-doc的内容,并将其重定向到名为conf的文件:

代码语言:javascript
复制
cat > conf << EOF
var1="cat"
var2="dog"
var3="hamster"
EOF

如何理解这里的命令顺序?bash是否首先处理其他所有内容(这里是-doc部分),作为最后一步,它看起来是> conf部分吗?

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-07-02 16:25:46

这里-文件是一种shell重定向,因此shell将以正常的重定向方式执行,从开始到结束(或从左到右,或从外观顺序)。POSIX对此进行了定义:

如果使用命令指定了多个重定向运算符,则计算顺序从头到尾。

在您的命令中,cat将首先执行> conf,打开和截断用于写入的conf文件,然后从Here-Document读取数据。

使用strace,您可以验证它:

代码语言:javascript
复制
$ 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
...
票数 17
EN

Unix & Linux用户

发布于 2015-07-02 16:25:03

bash创建运行cat的进程时,它打开conf对文件描述符1进行写入,并在对程序执行exec之前打开一个临时文件(用于这里的文档),用于读取文件描述符0。在这种情况下,这些操作发生的顺序并不重要。

当重新分配文件描述符(例如使用2>&1 )时,Order确实变得非常重要。

票数 -1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/213574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档