z.h*_*.h. 3 shell pipe io-redirection
包含管道和输出重定向的命令的执行顺序是什么?
假设我们执行以下操作:
Charles@myzone:/tmp$ mkdir /tmp/testdir
Charles@myzone:/tmp$ cd /tmp/testdir
Charles@myzone:/tmp/testdir$ touch file1 file2
Charles@myzone:/tmp/testdir$ ls | wc -l
2
Charles@myzone:/tmp/testdir$ ls | wc -l > ls_result
Charles@myzone:/tmp/testdir$ cat ls_result
3
Run Code Online (Sandbox Code Playgroud)
我知道如果你这样做,ls > result
那么result
将包含它自己的名字,因为外壳会做类似的事情
1) 创建/打开名为的文件result
2) 将 fd 设置result
为 stdout 3) execls
我原以为ls_result
值是 2,但结果是 3。
题
ls | wc -w > ls_result
上面的命令是如何执行的?
它相当于(ls | wc -w ) > ls_result
?
一些有关信息的链接?(我查过 bash 手册)
Kus*_*nda 14
utility1 | utility2 >output
Run Code Online (Sandbox Code Playgroud)
不等于
( utility1 | utility2 ) >output
Run Code Online (Sandbox Code Playgroud)
但要
utility1 | { utility2 >output; }
Run Code Online (Sandbox Code Playgroud)
这两个实用程序几乎同时启动,这意味着您希望命令有时返回 3,有时返回 2。
例子:
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
exists
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
exists
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
$ { [ -f test ] && echo exists >&2; } | { echo >test; }; rm test
Run Code Online (Sandbox Code Playgroud)
上面显示了管道右侧创建的文件有时会被管道左侧检测到。
归档时间: |
|
查看次数: |
903 次 |
最近记录: |