Ваша команда работает и правильно перенаправляет вывод в файл abc.txt
.
Вопрос в том, как ваш скрипт запрашивает входные данные и как вы запускаете скрипт?
Давайте посмотрим на два примера:
# Script_1.sh # 1
echo Please, enter your firstname and lastname # 2
read FN LN # 3
echo "Hi! $LN, $FN !" # 4
а также
# Script_2.sh # 5
read -p "Enter a comment " CM # 6
echo "You said $CM" # 7
Если вы запустите /bin/bash Script1.sh > abc.txt
вы не увидите вопрос "Пожалуйста, введите ..." в вашем tty. Если вы дадите ожидаемый ввод с клавиатуры, вы найдете вывод строк № 2 и № 4 в файле abc.txt
.
Если вы запустите /bin/bash Script2.sh > abc.txt
вы увидите вопрос "Введите комментарий", но в файле abc.txt
вы найдете только вывод строки # 7.
Примечание: если вы запускаете Script2, sh в подоболочке
(bash Script2.sh 2>&1)> abc.txt
вы не увидите вывод tty и найдете все в файле abc.txt
.
Если вы запустите его с
bash Script2.sh 2>ccc.txt 1>ddd.txt`
Вы найдете стандартный вывод (строка № 7) в ddd.txt
и стандартную ошибку (строка № 6) в ccc.txt
.
Если вы хотите перенаправить только часть вывода вашей команды, вы должны изменить свой скрипт.
Один из способов сделать это - создать функцию для перемещения части скрипта, которая будет генерировать интересный вывод (см. Ниже). Затем вы можете вызвать эту функцию из основной части вашего скрипта (где изначально был код, который вы переместили в функцию), перенаправив только этот вывод в файл журнала:
Part_To_Redirect(){
: # all that you want
}
# ... Main part of the script
# point where it was the part that generates the output
Part_to_Redirect "$@" > abc.txt # this to store only that part in the file
# Part_to_Redirect "$@" >> abc.txt # this to append that part in the file
# ...
Вы должны даже найти полезный tee
, что
перенаправляет вывод в несколько файлов, копирует стандартный ввод в стандартный вывод, а также в любые файлы, заданные в качестве аргументов.
the_command | tee abc.txt # To redirect Standard output
or
the_command 2>&1 | tee abc.txt # To redirect err in out and both in the file
В этом случае у вас будут обычные выходные данные вашей команды на tty, но в то же время вы сохраните копию в файле журнала abc.txt
. В вашем случае должно быть удобно, если вы используете read -p
как в script2, вызов the_command | tee abc.txt
.
Примечания и ссылки:
Добавив "$@"
вы можете передать все аргументы вашего скрипта в функцию.
Возможно, вам будет интересно узнать больше о bashredirection из многих источников в Интернете.