bash:如何连接两个命令的输出,以便我可以将它们连接到第三个?

时间:2011-09-21 11:32:22

标签: bash shell mercurial awk concatenation

$ hg status

$ hg status --ignored

给出非常相似的输出。我想连接它们以便我可以将它们提供给awk,好像有一个 hg status --all (或svn的 svn status --no-ignore

我在想:

$ echo "$(hg status)" "$(hg status --ignored)" | awk  ' ( $1 == "?" ) || ( $1 == "I") { print $2 }' | xargs rm -r

制作一个'make very clean really'命令,但它似乎偶尔会留下一个文件,可能是因为换行符丢失或其他原因。

4 个答案:

答案 0 :(得分:29)

使用curly braces to group commands

$ { echo first line; echo second line; } | grep "line"
first line
second line

(作为camh's comment的答案发布)

答案 1 :(得分:27)

您可以使用子shell:

( hg status; hg status --ignored ) | awk '( $1 == "?" ) || ( $1 == "I") { print $2 }' | xargs rm -r

答案 2 :(得分:6)

您可以使用其余的hg状态标志来显示您真正想要的内容:

hg status -uriamn

显示未知文件(u),删除文件(r),忽略(i),添加(a),修改(m),并且不显示状态前缀。

答案 3 :(得分:2)

这对我有用:

echo $(a)$(b)

如果你添加""你可以添加分隔符,例如:

echo "$(./gethostname.sh)|($(./getip.sh);"

我在Openwrt上使用它来播放我的ip设置:

echo "$( uci get system.@system[0].hostname )|$( ip addr | grep inet | grep br-lan | cut -d ' ' -f 6 | cut -d '/' -f 1 );"  | socat - UDP-DATAGRAM:255.255.255.255:4999,broadcast ;