Ksh
在 KSH 中未找到陷印點 (.) 文件錯誤
在 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"