В настоящее время у меня есть набор сценариев установки, которые записывают stderr/stdout в файл журнала, который работает хорошо, но мне также нужно перенаправить stdin для пользователя ответы на один и тот же файл журнала. Сценарии установки иногда используются в общей библиотеке (включая), которая также может считывать ввод пользователя. Я думал о добавлении пользовательской функции чтения, но это потребует изменения общей библиотеки и задается вопросом, есть ли способ сделать это из вызывающего сценария.Bash: Как перенаправить stdin, stdout и stderr в файл журнала для журнала установки
В настоящее время сценарии похожи на это:
#!/usr/bin/bash
. ./libInstall
INSTALL_LOG="./install.log"
((
echo "INFO: Installing..."
# Run some arbitrary commands...
# Read some input...
read ANSWER1
read ANSWER2
# Call function in libInstall which will prompt the user...
funcWhichAsksAQuestion ANSWER3
echo "INFO: Installation Complete"
) 2>&1) | tee -a "${INSTALL_LOG}"
Если я изменю «((», чтобы отразить линию ниже я могу тройник от стандартного ввода в файл журнала:
кошки - 2 >/dev/null | tee -a $ {INSTALL_LOG} | ((
Это работает, но требует 2 возврата каретки после завершения скрипта, по-видимому, из-за того, что труба сломана. Это почти есть, но я бы это сделал без необходимости нажимать дважды в конце, чтобы вернуться к t он раковина подсказка.
Эти сценарии должны быть достаточно переносимыми для работы на RHEL> = 5, AIX> = 5.1, Solaris> = 9 с самой низкой версией bash, являющейся v2.05.
Любые идеи, как я могу это достичь?
Благодаря
Вы не можете перенаправить 'stdin' в файл. вы можете перенаправить 'stdin' из файла. – anishsane
Согласен, поэтому я пытаюсь подключить его к файлу, прежде чем подключать его к скрипту. Я, вероятно, в конечном итоге реализую пользовательскую функцию «читать», но я надеялся избежать этого. ура –