Entonces, en el siguiente ejemplo:
echo "text to write to file but also not send to stdout" | tee -a $logfile 1> /dev/null
La salida no se imprime en el terminal. Pero cuando intento realizar la misma acción en función de una variable, no 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
¿Cómo puedo hacer que funcione el segundo ejemplo? ¿O debería probar otra forma de suprimir los mensajes?
Respuesta1
TL;DR:echo "text to write to file but also not send to stdout" | eval tee -a $logfile $route_devnull
bash
no evalúa variables como comandos. Puedes escribir
echo "abc && touch new"
y se imprimirá abc && touch new
en la terminal. Esto es por diseño, ya que los usuarios pueden ingresar cadenas y no queremos confiar en sus comandos, ya que pueden hacer cosas maliciosas como intentar dañar nuestra computadora.
Aquí es dondeeval
viene en.
En lugar de ejecutar primero el comando, eval lee yevalúatodos los argumentos para construir otro comando y luego ejecutarlo. Ejemplo:
eval echo "abc && touch new"
Simplemente empuja eval
antes de lo que quieras evaluar antes de la ejecución. Y por "simplemente empujar" me refiero a "pensar con mucho cuidado antes de usar eval
"