2

У меня есть скрипт ex myscript.sh, и он должен перенаправить на стандартный вывод то, что получает от стандартного ввода (как кошка).

Например:

myscript.sh < myfile.txt > myfile2.txt

Как это сделать?

Кроме того, как я могу перенаправить стандартный вывод в другой файл, а не myfile2.txt?

Мои попытки:

Я пытался с помощью:

echo $*

И это работает только с использованием:

myscript.sh | cat myfile.txt

Если я использую:

myscript.sh < myfile.txt

ничего не печатает

3 ответа3

4

Попробуйте добавить cat <&0 в ваш скрипт, где вы хотите выполнить работу по перенаправлению.

Выше &0 представляет дескриптор файла stdin , и вы по существу помещаете вещи, которые вы получаете, из stdin в cat .

В качестве альтернативы, используйте следующий цикл, чтобы сделать это самостоятельно:

while read line
do
  echo "$line"
done
3

Я не могу понять, что вы хотите: $ * выводит позиционные параметры, а вы не предоставили никаких, поэтому у вас нет вывода (кроме новой строки).

cat не читает стандартный ввод, когда ему дается список файлов, поэтому myscript.sh | cat myfile.txt имеет тот же эффект, что и myscript.sh ; cat myfile.txt (не совсем верно, но правильно с точки зрения ввода / вывода).

Если вы хотите, чтобы ваш скрипт копировал ввод в вывод, то он должен содержать просто cat .

Если вы хотите получить вывод из $ *, вам нужно запустить myscript.sh {parameters} .

И что вы подразумеваете под "перенаправить стандартный вывод в другой файл, а не в myfile2.txt"? Вы, вероятно, не имеете в виду ... > myfile3.txt .

0

Я предполагаю, что вы хотите дублировать ввод скрипта на вывод терминала, а не перенаправлять.

cat myfile.txt | tee /dev/tty | myscript.sh > myfile2.txt

или даже проще

cat myfile.txt; myscript.sh < myfile.txt > myfile2.txt

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .