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の答えは役に立ちません。
ファイルが存在するかどうかを事前にテストできることを知っています。スクリプトにこのようなエラーが多いので、そうしなくてもこのエラーをキャッチする方法があったらと思います。
答え1
command
コマンドを使用して削除できます。特別な動作(失敗するとシェルが終了するなど)特殊組み込み機能ksh
またはのようなPOSIXシェルからbash
。
だから:
if ! command . /my/file/source.ksh; then
echo >&2 ". failed"
exit 1
fi
見つからない、読み取るために開くことができない、読み取りまたは解析中にエラーが発生した場合、または最後のコマンドの実行が失敗を返した場合は.
失敗/my/file/source.ksh
する可能性があります。
source.ksh
読み取りを開くことができない状況のみを検討したい場合はexec
、特殊内蔵):
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"