bash: comment concaténer la sortie de deux commandes pour que je puisse pipe à un tiers?

$ hg status

et

$ hg status --ignored

donne des résultats très similaires. J'aimerais les concaténer pour pouvoir les nourrir à awk, comme s'il y avait un statut hg --tout (ou SVN svn status --no-ignore )

je pense à quelque chose comme:

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

pour faire une commande "make very clean indeed", mais il semble parfois laisser un fichier derrière, peut-être parce qu'un de retour à la ligne disparaît ou quelque chose.

24
demandé sur John Lawrence Aspden 2011-09-21 15:32:21

4 réponses

vous pouvez utiliser un subshell:

( hg status; hg status --ignored ) | awk '(  == "?" ) || (  == "I") { print  }' | xargs rm -r
27
répondu Alan Haggai Alavi 2011-09-21 11:51:43

Utiliser des accolades pour des commandes de groupe :

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

(posté comme réponse de commentaire de camh )

27
répondu Vincent Scheib 2017-05-23 12:09:55

vous pouvez utiliser le reste des indicateurs de statut hg pour montrer ce que vous voulez vraiment:

hg status -uriamn

qui affiche les fichiers inconnus (u), les fichiers supprimés (r), ignorés (i), ajoutés (a), modifiés (m) et qui le fait sans afficher le préfixe d'état.

6
répondu richq 2011-09-21 11:48:04

ça marche pour moi:

echo $(a)$(b)

si vous ajoutez "" vous pouvez ajouter des séparateurs par exemple.:

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

j'utilise ceci sur Openwrt pour diffuser mes paramètres 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 ;
2
répondu animtakhnet 2016-06-06 10:20:06