Bash
將 STDOUT 分配給變數時的 Shell 腳本錯誤處理
我正在嘗試在我的 shell 腳本中實現錯誤處理,如使用 $? 的最佳實踐中的第二個答案中所述。在重擊中?
我的腳本如下所示:
#!/bin/bash try() { "$@" code=$? if [ $code -ne 0 ] then echo "oops $1 didn't work" exit 1 fi } try myvar=$(mktemp -p ./)
腳本以
./test.sh: line 4: myvar=./tmp.scNLzO1DDi: No such file or directory oops myvar=./tmp.scNLzO1DDi didn't work
只是,
myvar=$(mktemp -p ./)
當然工作正常, $myvar 返回臨時文件的完整路徑和名稱。
如何獲得將 tmp 文件的名稱分配給變數 myvar 的語句,同時仍將整個語句及其結果傳遞給 try(),以便 try() 可以做它需要做的事情?謝謝。
我認為您想使用錯誤陷阱而不是評估包裝器。
err_handler () { code=$? if [ $code -ne 0 ] then echo "oops $1 didn't work" exit 1 fi } trap 'err_handler' ERR myvar=$(mktemp -p ./) trap ERR
使用,在為 建構參數列表期間呼叫之前執行
try myvar=$(mktemp -p ./)
的子shell 。mktmp``try``try
以後要擴展子shell,需要引用 的參數
try
:try 'myvar=$(mktemp -p ./)'
稍後要進行擴展,您需要使用
eval "$@"
而不是"$@"
第一行中的try
.