Pergunta semelhante, mas sem resposta:Como podemos executar um comando armazenado em uma variável?
Como fazer o seguinte no script bash?
error=">&2"
echo 'something went wrong' $error
em vez de
echo 'something went wrong' >&2
Por que?
Porque se você digitar como >2&
, ele funciona normalmente, mas grava mensagens de erro em um arquivo chamado 2
.
Responder1
Como eles disseram nos comentários, você não sabe, realmente.
Bem, você poderia fazer isso com eval
, mas teria problemas em citar/escapar tudooutronessa linha de comando.
Porém, há algumas coisas que você pode fazer com funções: executar um determinado comando simples sob um redirecionamento; ou apenas escrever uma mensagem para 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
Ênfase nosimplescomando no primeiro, não é eval
e você não pode ter sintaxe de shell dentro do comando. Por exemplo, tostderr foo | bar
ele redireciona a saída de apenas foo
(além do pipe para stderr) e tostderr (foo | bar)
não funciona.
Se você estivesse no zsh e realmente quisesse, poderia usar um alias global para adicionar o redirecionamento (mas alguns podem pensar que isso está beirando a codificação ofuscada):
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR