2011-09-21 7 views
24
$ hg status 

bash:2つのコマンドの出力を連結して、3つ目のコマンドにパイプする方法を教えてください。

$ hg status --ignored 

非常に類似した出力を与えます。私は私はのようなものを考えている

(やsvnのSVN状況を--no-無視)--all HG状況があったかのように私は、AWKにそれらを供給することができますので、それらを連結したいのですが:

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

「確かに非常にきれいにする」コマンドを作るために、改行が欠落しているか何か行くかもしれないので、たまに後ろのファイルを残しているようです。

あなたがサブシェル使用することができます
+0

あなたは 'echo'(または最後のパイプをスキップ)と' rm'を交換する場合は、何が出力され、どのようなことがあったはずですか?また、 'rm'がファイルの削除を拒否する権限の問題があるかもしれません。 –

答えて

27

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

サブシェル(別のプロセス)を使う必要はありません。代わりに、中括弧を使ってグループ化することができます: '{a; b; } | c ' – camh

+2

+1、非常にエレガント – orip

+1

私は意味のある速度差' time {git branch; git branch -r; }>/dev/null;実際にサブシェルは私のシステムでは一貫して高速です - つまり、@camh、グループの利点は何ですか? –

6

あなたはあなたが本当に欲しいものを示すために、HGのステータスフラグの残りの部分を使用することができた:

hg status -uriamn 

不明のファイル(U)を示し、削除ステータスプレフィックスを表示せずに、ファイル(r)、無視(i)、追加(a)、変更(m)

+0

+1私は "hg st -iu | awk ...'を試してみませんか?あなたの答えが見えるのを見ました... – Kent

+0

そして、私は早く投稿しましたが、フラッグの中から面白いアナグラムを作り出そうとしていました;-) – richq

25

使用curly braces to group commands

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

camh's commentからの回答として投稿されました)

+0

ありがとう、ありがとう。これは私が探していたもので、別のコマンドの出力とともに 'sendmail -t 'にヘッダを連結しようとしています。 –

2

これは私の作品:

echo $(a)$(b) 

あなたは区切り文字などを追加することができます "" 追加した場合:

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

私は私のIP設定をブロードキャストするOpenWrtの上でこれを使用します。

echo "$(uci get [email protected][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 ; 
関連する問題