Cómo almacenar '>&2' en una variable

Cómo almacenar '>&2' en una variable

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 evaly no puede tener sintaxis de shell dentro del comando. Por ejemplo, tostderr foo | barredirige 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

información relacionada