bash: как объединить вывод двух команд, чтобы я мог передать их третьей? - PullRequest
25 голосов
/ 21 сентября 2011
$ hg status

и

$ hg status --ignored

дают очень похожие результаты. Я хотел бы объединить их, чтобы я мог передать их в awk, как если бы существовал статус hg --all (или svn's svn status --no-ignore )

Я думаю что-то вроде:

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

, чтобы сделать команду «действительно очень чисто», но иногда кажется, что файл остается позади, возможно, из-за пропуска новой строки или чего-то в этом роде.

Ответы [ 4 ]

29 голосов
/ 13 мая 2014

Используйте фигурные скобки для группировки команд :

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

(Опубликовано как ответ от комментария Кэмх )

28 голосов
/ 21 сентября 2011

Вы можете использовать подоболочку:

( hg status; hg status --ignored ) | awk '( $1 == "?" ) || ( $1 == "I") { print $2 }' | xargs rm -r
6 голосов
/ 21 сентября 2011

Вы можете использовать оставшиеся флаги состояния hg, чтобы показать, что вы действительно хотите:

hg status -uriamn

Это показывает неизвестные файлы (u), удаленные файлы (r), игнорируется (i), добавлено (а), изменено (м) и делает это без отображения префикса статуса.

2 голосов
/ 06 июня 2016

Это работает для меня:

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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...