
同様の質問ですが、答えはありません。変数に保存されたコマンドをどのように実行できますか?
Bashスクリプトで次のことをどのように実行できますか?
error=">&2"
echo 'something went wrong' $error
変える
echo 'something went wrong' >&2
なぜ?
タイプミスはうまく>2&
いきますが、というエラーメッセージが書かれているからです2
。
答え1
コメントで述べたように、あなたは本当に知りません。
eval
まあ、あなたはそれを行うことができますその他コマンドラインから。
ただし、関数を使用していくつかの操作を実行できます。リダイレクトで指定された単純なコマンドを実行するか、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
強調するシンプルコマンドは最初のコマンドにありますが、コマンドeval
ではシェル構文を使用できません。たとえば、出力をパイプを介してstderrにtostderr foo | bar
リダイレクトするだけで効果はありません。foo
tostderr (foo | bar)
zshを使用していて本当にこれを実行したい場合は、グローバルエイリアスを使用してリダイレクトを追加できます(しかし、一部はこれがエンコードを難読化するのに近いと思うかもしれません)。
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR