同様の質問ですが、回答はありません:変数に保存されたコマンドを実行するにはどうすればよいですか?
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
、コマンド内にシェル構文を含めることはできません。たとえば、tostderr foo | bar
出力がfoo
(パイプを通過して stderr に)リダイレクトされるため、tostderr (foo | bar)
機能しません。
zsh を使用していて、本当に必要な場合は、グローバル エイリアスを使用してリダイレクトを追加できます (ただし、これは難読化されたコーディングに近いと考える人もいるかもしれません)。
#/usr/bin/zsh
alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR