Cómo suprimir la salida de la T basada en la variable en Bash

Cómo suprimir la salida de la T basada en la variable en Bash

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

bashno evalúa variables como comandos. Puedes escribir

echo "abc && touch new"

y se imprimirá abc && touch newen 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 dondeevalviene 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 evalantes 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"

información relacionada