Unix
分別為 shell 和程序重定向 STDERR
我正在做一些審計自動化,這個例子描述了檢查 Java 的版本,即使其他程序做同樣的事情。
“java -version”的輸出到 STDERR,它很容易重定向,但我想將 shell 錯誤(例如,當 java 二進製文件失去時)發送到 /dev/null。似乎 shell 重定向是一個全有或全無的命題。
到目前為止,我最有希望的嘗試是:
{ /bin/ksh "{java -version 2>&1;}"; } 2>/dev/null
…正確地將 -version 命令的輸出發送到 STDOUT,但如果 java 不存在,它也會將 shell“未找到”錯誤發送到 STDOUT。我不想看到那個消息。
與以下行為相同:
{ /bin/ksh "{java -version 2>&1;}" 2>/dev/null; }
有誰知道限制重定向范圍的方法,以便每個程序都有自己的?我不僅限於 ksh,但出於環境原因,它必須是基於 shell 的單線。
是否無法檢查是否找到了 java 並且可以執行?
test -x "$(which java)" && java -version 2>&1
或者如果您也想繞過測試並檢查 java 錯誤
java -version 2>/dev/null 1>/dev/null && java -version 2>&1
您可以重定向到其他描述符。這適用於 bash,我認為它也適用於 ksh:
exec 3>javalog java ... 2>&1 >&3 exec 3>&-