Como suprimir a saída do tee com base na variável no Bash

Como suprimir a saída do tee com base na variável no Bash

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

bashnão avalia variáveis ​​como comandos. Você pode escrever

echo "abc && touch new"

e ele será impresso abc && touch newno 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 queevalentra.

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 evalantes do que você deseja avaliar antes da execução. E por "apenas empurre" quero dizer "pense com muito cuidado ao usar eval"

informação relacionada