У меня есть следующий скрипт
#!/bin/bash
file="$1"
cat $file
n=$(cat $file | wc -l)
cat $file
Я использую его так, что cat some_file.txt | myScript.sh
первый cat
выводит содержимое файла, а второй нет. Как мне сохранить содержимое переменной после конвейера?
решение1
Это не делает то, что вы думаете. $1
Это первый параметр, который вы передаете скрипту, но на самом деле вы ничего не передаете. Это означает, что cat $file
фактически становится cat
одиноким. Если не задано никаких аргументов, cat
просто выведет свои входные данные:
$ echo "foo" | cat
foo
Итак, первый cat
выводит ввод, содержимое файла. У второго ввода нет, так как все занято первым, поэтому он ничего не делает. То, что вы хотите сделать, это что-то вроде:
myscript.sh file
Это приведет к тому, что содержимое файла будет распечатано дважды, а также сохранено cat $file |wc
в переменной n
.
Если вы хотите сохранить содержимое файла в формате $file
, попробуйте:
file="$(cat < "$1")"
И запустите скрипт с именем файла в качестве аргумента:
script.sh file