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

发布于 2024-12-05 17:26:18 字数 442 浏览 1 评论 0 原文

$ 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

制作一个“确实非常干净”的命令,但它似乎偶尔会留下一个文件,也许是因为换行符丢失或其他原因。

$ hg status

and

$ hg status --ignored

give very similar outputs. I'd like to concatenate them so I can feed them to awk, as if there were an hg status --all (or svn's svn status --no-ignore)

I'm thinking something like:

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

to make a 'make very clean indeed' command, but it seems to occasionally leave a file behind, perhaps because a newline goes missing or something.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

羅雙樹 2024-12-12 17:26:18

使用 花括号对命令进行分组:(

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

发布为来自camh 的评论)

Use curly braces to group commands:

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

(Posted as an answer from camh's comment)

夏尔 2024-12-12 17:26:18

您可以使用子外壳:

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

You can use a subshell:

( hg status; hg status --ignored ) | awk '( $1 == "?" ) || ( $1 == "I") { print $2 }' | xargs rm -r
稚然 2024-12-12 17:26:18

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

hg status -uriamn

显示未知文件 (u)、已删除文件 (r)、已忽略 (i)、已添加 (a)、已修改 (m) 以及不显示的情况状态前缀。

You can use the rest of the hg status flags to show what you really want:

hg status -uriamn

That shows unknown files (u), removed files (r), ignored (i), added (a), modified (m) and does so without showing the status prefix.

三人与歌 2024-12-12 17:26:18

这对我有用:

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 ;

This works for me:

echo $(a)$(b)

if you add "" you can add delimiters eg.:

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

I use this on Openwrt to broadcast my ip settings:

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 ;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文