Как сохранить содержимое переменной после трубы

У меня есть следующий скрипт

#!/bin/bash file="$1" cat $file n=$(cat $file | wc -l) cat $file 

Я использую его как этот cat some_file.txt | myScript.sh cat some_file.txt | myScript.sh первый cat выводит содержимое файла, а второй – нет. Как сохранить содержимое переменной после трубы?

One Solution collect form web for “Как сохранить содержимое переменной после трубы”

Это не делает то, что вы думаете, что это делает. $1 – это первый параметр, который вы передаете скрипту, но на самом деле вы его не передаете. Это означает, что cat $file фактически становится cat . Когда не заданы какие-либо аргументы, cat просто напечатает свой вход:

 $ echo "foo" | cat foo 

Итак, первая cat печатает входные данные, содержимое файла. Второе не имеет ввода, так как все было принято первым, поэтому оно ничего не делает. То, что вы хотите сделать, это что-то вроде:

 myscript.sh file 

Это будет дважды печатать содержимое файла, а также сохранить вывод cat $file |wc в переменной n .


Если вы хотите сохранить содержимое файла в $file , попробуйте:

 file="$(cat < "$1")" 

И запустите сценарий с именем файла в качестве аргумента:

 script.sh file 
  • использование sed / awk в переменных сценария bash
  • Оптимизация сценария оболочки с длительным циклом работы
  • Сценарий Bash, использующий чтение, должен прекратить выполнение на Ctrl + D
  • Возврат части строки, соответствующей шаблону
  • Двухсловный аргумент в сценарии оболочки
  • Поиск среди содержимого большого количества текстовых файлов?
  • Как я могу заставить pwd разрешить мягкую ссылку?
  • запустить сценарии оболочки в последовательности?
  • Как я могу загрузить функции этого файла скрипта, не загружая его каждый раз? «Команда не найдена» (основы Bash / scripting)
  • Вопрос о shell и .profile, .bash_profile, .bashrc
  • Git alias multi-commands с; а также &&
  • Linux и Unix - лучшая ОС в мире.