Bash
如何將’>&2’儲存在變數中
類似的問題,但沒有答案:我們如何執行儲存在變數中的命令?
如何在 bash 腳本中執行以下操作?
error=">&2" echo 'something went wrong' $error
代替
echo 'something went wrong' >&2
為什麼?
因為如果您像這樣拼寫錯誤
>2&
,它會正常工作,但會將錯誤消息寫入名為2
.
就像他們在評論中說的那樣,你真的沒有。
好吧,您可以使用 來做到這一點,但是在該命令行上
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
,你不能在命令中使用 shell 語法。例如,tostderr foo | bar
它重定向just的輸出foo
(通過管道到stderr),並且tostderr (foo | bar)
不會工作。如果你在 zsh 上,並且真的想這樣做,你可以使用全域別名來添加重定向(但有些人可能認為這接近於混淆編碼):
#/usr/bin/zsh alias -g TOSTDERR='>&2' echo something bad happened TOSTDERR