Pregunta similar, pero sin respuesta:¿Cómo podemos ejecutar un comando almacenado en una variable?
¿Cómo hacer lo siguiente en el script bash?
error=">&2"
echo 'something went wrong' $error
en lugar de
echo 'something went wrong' >&2
¿Por qué?
Porque si escribes algo así >2&
, funciona normalmente pero escribe mensajes de error en un archivo llamado 2
.
Respuesta1
Como dijeron en los comentarios, en realidad no es así.
Bueno, podrías hacer eso con eval
, pero tendrías problemas citando/escapando de todo.demásen esa línea de comando.
Sin embargo, hay algunas cosas que puedes hacer con las funciones: ejecutar un comando simple determinado bajo una redirección; o simplemente escribir un mensaje a stderr:
#!/bin/bash
tostderr() {
"$@" >&2
}
warn() {
local IFS=" "
printf "%s\n" "$*" >&2
}
tostderr printf "warning: %s\n" "something happened"
warn another thing to warn about
Énfasis en elsimplecomando en el primero, no lo es eval
y no puede tener sintaxis de shell dentro del comando. Por ejemplo, tostderr foo | bar
redirige la salida de just foo
(más allá de la tubería a stderr) y tostderr (foo | bar)
no funcionará.
Si estuviera en zsh y realmente quisiera hacerlo, podría usar un alias global para agregar la redirección (pero algunos podrían pensar que esto roza la codificación ofuscada):
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR