Rob*_*ark 54 bash shell pipe process subshell
如何将多个命令的stdout传递给单个命令?
示例1:组合并排序所有三个echo命令的输出:
echo zzz; echo aaa; echo kkk
Run Code Online (Sandbox Code Playgroud)
期望的输出:
aaa
kkk
zzz
Run Code Online (Sandbox Code Playgroud)
示例2:重写以下内容,以便所有命令都使用管道在单个命令行中,而不重定向到临时文件:
setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo
Run Code Online (Sandbox Code Playgroud)
Rob*_*ark 89
使用括号()将命令组合到一个进程中,该进程将连接每个进程的stdout.
示例1(注意这$是shell提示符):
$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz
Run Code Online (Sandbox Code Playgroud)
例2:
(setopt; unsetopt; set) | sort
Run Code Online (Sandbox Code Playgroud)
cod*_*ter 14
你可以使用{}这个,并消除对子shell的需求(list),如下所示:
{ echo zzz; echo aaa; echo kkk; } | sort
Run Code Online (Sandbox Code Playgroud)
{之前和之后我们确实需要一个空白字符}.;当序列写在一行上时,我们也需要最后一个.
我们也可以在多行上写它而不需要任何;:
例1:
{
echo zzz
echo aaa
echo kkk
} | sort
Run Code Online (Sandbox Code Playgroud)
例2:
{
setopt
unsetopt
set
} | sort
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39314 次 |
| 最近记录: |