Я застрял с bash scipt, который должен писать как в stdout, так и в файл. Я использую функции и некоторые переменные внутри них. Всякий раз, когда я пытаюсь перенаправить функцию в файл и печатать на экране с помощью tee, я не могу использовать переменные, которые я использовал в функции, поэтому они как-то становятся локальными. Вот простой пример:В bash tee делает переменные функции локальными, как я могу избежать этого?
#!/bin/bash
LOGV=/root/log
function var()
{
echo -e "Please, insert VAR value:\n"
read -re VAR
}
var 2>&1 | tee $LOGV
echo "This is VAR:$VAR"
Выход:
[[email protected] ~]# ./var.sh
Please, insert VAR value:
foo
This is VAR:
[[email protected] ~]#
Заранее спасибо!
EDIT: В ответ на @Etan Рейснер предложение использовать var 2>&1 > >(tee $LOGV)
Единственная проблема этой конструкции является то, что файл журнала dosn't получить все ...
[[email protected]~]# ./var.sh
Please, insert VAR value:
foo
This is VAR:foo
[[email protected] ~]# cat log
Please, insert VAR value:
Я тонкий k Ваша проблема в том, что, поскольку вы используете канал (в 'tee'), начальный вызов' var' происходит в подоболочке. Таким образом, вы устанавливаете переменную среды в этом подпроцессе, но не влияете на среду основного (родительского) процесса. –
Вы хотите, чтобы запрос «Пожалуйста, вставьте ...» в выходной файл? –
Спасибо, да, я думаю, это проблема с подоболочкой, но пока не могу ее исправить. Уильям Пурселл, да, я знаю! – LinenG