Передача нескольких команд в одну команду
Как я могу передать стандартный вывод нескольких команд в одну команду?
Пример 1: объединить и отсортировать выходные данные всех трех команд echo:
echo zzz; echo aaa; echo kkk
желаемый результат:
aaa
kkk
zzz
Пример 2: перепишите следующее, чтобы все команды находились в одной командной строке с использованием каналов без перенаправлений во временный файл:
setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo
3 ответа
Используйте скобки (), чтобы объединить команды в один процесс, который объединит стандартный вывод каждого из них.
Пример 1 (обратите внимание, что $
это приглашение оболочки):
$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz
Пример 2:
(setopt; unsetopt; set) | sort
Ты можешь использовать {}
для этого и устранить необходимость в под-оболочке, как в (list)
, вот так:
{ echo zzz; echo aaa; echo kkk; } | sort
Нам нужен пробельный символ после {
и раньше }
, Нам также нужно последнее ;
когда последовательность написана в одной строке.
Мы могли бы также написать его в несколько строк без необходимости какого-либо ;
:
Пример 1:
{
echo zzz
echo aaa
echo kkk
} | sort
Пример 2:
{
setopt
unsetopt
set
} | sort
В Windows это будет выглядеть следующим образом: (echo zzz & echo aaa & echo kkk) | sort
Или, если он находится внутри командного файла, он может быть как однострочным (как образец), так и многострочным:
(
echo zzz
echo aaa
echo kkk
) | sort
Примечание: в оригинальном посте не упоминается, что это только для Linux, поэтому я добавил решение для командной строки Windows... это очень полезно при работе с VHD/VHDX с diskpart внутри скриптов (echo diskpart_command
) вместо эха на том же, но пусть там echo
Есть и другой способ без эха и с >
перенаправитель, но он очень склонен к ошибкам и гораздо более сложен для записи (зачем использовать сложный способ подвержен ошибкам, если существует простой способ, который всегда работает хорошо)... также помните %d%
дает вам фактический путь (очень полезно для не жесткого кодирования пути к файлам VHD/VHDX).