Подтвердить что ты не робот

Вызов нескольких команд в одну команду

Как я могу передать stdout из нескольких команд в одну команду?

Пример 1: объединение и сортировка вывода всех трех команд эха:

echo zzz; echo aaa; echo kkk

желаемый результат:

aaa
kkk
zzz

Пример 2: перепишите следующее, чтобы все команды находились в одной командной строке, используя каналы, без перенаправления на временный файл:

setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo
4b9b3361

Ответ 1

Используйте круглые скобки(), чтобы объединить команды в один процесс, который объединит stdout каждого из них.

Пример 1 (обратите внимание, что $ - приглашение оболочки):

$ (echo zzz; echo aaa; echo kkk) | sort
aaa
kkk
zzz


Пример 2:

(setopt; unsetopt; set) | sort

Ответ 2

Вы можете использовать {} для этого и исключить необходимость в под-оболочке, как в (list), например:

{ echo zzz; echo aaa; echo kkk; } | sort

Нам нужен символ пробела после { и до }. Мы также нуждаемся в последнем ;, когда последовательность записывается на одной строке.

Мы могли бы также записать его на несколько строк без необходимости в любом ;:

Пример 1:

{
  echo zzz
  echo aaa
  echo kkk
} | sort

Пример 2:

{
  setopt
  unsetopt
  set
} | sort

Ответ 3

В 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).