Ksh

在 KSH 中未找到陷印點 (.) 文件錯誤

  • April 18, 2013

在 ksh88 中,我可以使用“dot”命令獲取文件,例如

. /my/file/source.ksh

但是,如果 source.ksh 不存在,我想擷取錯誤。

所以我嘗試了這個:

#!/bin/ksh

trap "echo 'Source Not Found'; exit 1" ERR
. test2.ksh

但是陷阱從不顯示錯誤消息,腳本返回:

./test.ksh[4]: test2.ksh:  not found.

我什至嘗試在trap沒有任何信號的情況下使用它,它仍然沒有捕捉到錯誤。

有什麼辦法可以捕捉到這個錯誤?我必須為這個腳本使用 ksh88。Bash 答案對這個問題毫無用處。

我知道我可以事先測試文件是否存在,我只是希望有一種方法可以擷取這個錯誤而不必這樣做,因為我的腳本中有很多這樣的內容。

您可以使用該command命令來刪除POSIX shell中的特殊**內置ksh命令(如或bash.

所以:

if ! command . /my/file/source.ksh; then
 echo >&2 ". failed"
 exit 1
fi

現在,.如果找不到,可能會失敗/my/file/source.ksh,或者無法打開以供閱讀,或者讀取或解析時出錯,或者在其中執行的最後一個命令返回失敗。

如果你只想考慮source.ksh無法打開閱讀的情況,你可以使用exec(另一個特殊的 builtin):

die() {
 IFS=" "
 printf >&2 'Error: %s\n' "$*"
 exit 1
}
command exec 3< /my/file/source.ksh || die "Can't read the file"
command . /dev/fd/3

或使用eval代替.

code=$(cat /my/file/source.ksh) || die "Can't read the file"
eval "$code"

引用自:https://unix.stackexchange.com/questions/72920