如何將“>&2”儲存在變數中

如何將“>&2”儲存在變數中

類似的問題,但沒有答案:我們如何運行儲存在變數中的命令?

如何在 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而且你不能在命令中使用 shell 語法。例如,tostderr foo | bar它僅重定向輸出foo(通過管道到 stderr),並且tostderr (foo | bar)不起作用。


如果您使用 zsh,並且確實想要這樣做,您可以使用全域別名來新增重定向(但有些人可能認為這接近混淆編碼):

#/usr/bin/zsh

alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR

相關內容