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

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

#!/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 
  • Вывод сценария оболочки неправильно разбивается при передаче в качестве аргумента скрипту
  • Ключ-привязка для открытия терминала, на котором запущен python в ratpoison
  • Как осуществляется перенаправление?
  • Программирование оболочки, исключая временные файлы
  • Какое распределение вы предлагаете для ежедневного использования?
  • Какие специальные символы приглашения для поддержки busbox для busybox?
  • Правильно проанализировать аргументы в скрипте, которые ведут себя как оболочка, вызываемая через SSH
  • Как перейти от дочерних каталогов к корню?
  • Объединение двух файлов и уникальное в новом файле
  • Найти все старые версии на основе версии в имени файла
  • Как именно `if $ cmd; затем $ cmd; fi` отличаются от `$ cmd && $ cmd`?
  • Linux и Unix - лучшая ОС в мире.