Как разбить файл и вывести его из команды?

Обычно вы пишете:

diff file1 file2 

Но я хотел бы отличить файл и выводить из команды (здесь я делаю команду тривиальной):

 diff file1 <(cat file2 | sort) 

Хорошо, эта работа, когда я ввожу это вручную в приглашении оболочки, но когда я помещаю точно такую ​​же строку в сценарий оболочки, а затем запускаю скрипт, я получаю ошибку.

Итак, вопрос в том, как это сделать правильно?

Конечно, я хотел бы избежать записи вывода во временный файл.

2 Solutions collect form web for “Как разбить файл и вывести его из команды?”

Я подозреваю, что ваш скрипт и ваша оболочка разные. Возможно, у вас есть #!/bin/sh в верхней части вашего скрипта в качестве интерпретатора, но вы используете bash как свою личную оболочку. Вы можете узнать, какую оболочку вы используете в терминале, запустив echo $SHELL .

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

 cat file2 | sort | diff file1 - 

Или избежать бесполезного использования кошки :

 sort < file2 | diff file1 - 

Объем стандартного ввода – это сам сценарий, поэтому просто введите код внутри блока следующим образом:

 { diff file1 <(sort file2) } 

Таким образом, объем STDIN находится внутри блока.

Я пробовал и работает.

  • Попытка понять синтаксисы перенаправления bash и их выходы
  • Как вы обрабатываете всю команду как sudo, которая включает перенаправление или конвейер?
  • Значение `cat / dev / null> file`
  • Terminal - перенаправление вывода в файл сокращается
  • Команда «Судо» с префиксом не работает; без sudo делает.
  • Перенос связывания труб и перенаправления с дизъюнктами, конъюнктами и т. Д.?
  • Разница между 1> и>
  • Запись команды команды в файл без использования перенаправления
  • Цепочка команд mysqldumps для вывода одного gzip-файла
  • Два входных канала через перетасование дескриптора файла и / dev / fd
  • труба и журнал STDOUT одновременно
  • Linux и Unix - лучшая ОС в мире.