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.
4 réponses
vous pouvez utiliser un subshell:
( hg status; hg status --ignored ) | awk '( == "?" ) || ( == "I") { print }' | xargs rm -r
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 )
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.
ç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 ;