Então, no exemplo a seguir:
echo "text to write to file but also not send to stdout" | tee -a $logfile 1> /dev/null
A saída não é impressa no terminal. Mas quando tento fazer a mesma ação baseado em uma variável não funciona.
Ex:
$loud=""
if [ -z $loud ]; then
route_devnull="1> /dev/null"
else
route_devnull=""
fi
echo "text to write to file but also not send to stdout" | tee -a $logfile $route_devnull
Como posso fazer o segundo exemplo funcionar? Ou devo tentar outra forma de suprimir as mensagens?
Responder1
DR:echo "text to write to file but also not send to stdout" | eval tee -a $logfile $route_devnull
bash
não avalia variáveis como comandos. Você pode escrever
echo "abc && touch new"
e ele será impresso abc && touch new
no terminal. Isso ocorre intencionalmente, pois as strings podem ser inseridas pelos usuários e não queremos confiar em seus comandos, pois elas podem fazer coisas maliciosas, como tentar quebrar nosso computador.
É aqui queeval
entra.
Em vez de primeiro executar o comando, eval lê eavaliatodos os argumentos para construir outro comando e depois executá-lo. Exemplo:
eval echo "abc && touch new"
Basta empurrar eval
antes do que você deseja avaliar antes da execução. E por "apenas empurre" quero dizer "pense com muito cuidado ao usar eval
"