Обычно нам нужно передать только один аргумент:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
Есть ли способ передать два аргумента? Что-то вроде
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Я мог бы сначала сохранить оба результата в файле
echo abc > file1
echo xyz > file2
cat file1 file2
Но тогда я мог бы случайно перезаписать файл, что не очень хорошо. Это входит в неинтерактивный скрипт. По сути, мне нужен способ передать результаты двух произвольных команд cat
без записи в файл.
ОБНОВЛЕНИЕ: Извините, пример маскирует проблему. Хотя { echo abc ; echo xyz ; } | cat
кажется, что работает, выход из-за echo
s, а не cat
.
Лучшим примером будет то, { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
что не работает, как ожидалось.
С
file1:
a,b
c,d
file2:
1,2
3,4
Ожидаемый результат:
b,1
d,3
ПОСТАНОВИЛИ:
Используйте процесс подстановки :cat <(command1) <(command2)
Или создайте именованные каналы, используя mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Менее элегантный и более многословный, но отлично работает, если вы убедитесь, что temp1 и temp2 не существуют до этого.