Você deve usar script
em vez disso, ele é projetado exatamente para esse propósito:
script /var/log/myinstall.log -c ./install.ksh
Ele registrará a entrada para read
, assim como qualquer saída.
Eu tenho um script que guia os usuários através da instalação do meu software e eu quero escrever um arquivo de log no caso de algo ruim acontecer e o usuário precisar de suporte.
O script é assim:
while true; do
echo "This script will help you with the installation. Do you wish to proceed?"
echo "(1) Yes"
echo "(2) No"
read proceed
case $proceed in
1 ) break;;
* ) echo "Aborting."; exit 8;;
esac
done
unset proceed
Eu, então, o executo usando ./install.ksh | tee /var/log/myinstall.log
e tudo funciona bem, mas a entrada do usuário para a pergunta não está registrada.
Quando eu adiciono echo $proceed
após o comando read
, ele é gravado no log, mas exibido duas vezes, assim:
This script will help you with the installation. Do you wish to proceed?
(1) Yes
(2) No
1 #this is the input which is not written to the log
1 # this is the echo which is written to the log
Minha pergunta agora é como eu poderia suprimir a saída do comando read
ou como eu poderia escrever o echo
apenas no arquivo mas não no STDOUT?
Você deve usar script
em vez disso, ele é projetado exatamente para esse propósito:
script /var/log/myinstall.log -c ./install.ksh
Ele registrará a entrada para read
, assim como qualquer saída.
Tags tee ksh shell-script read