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の答えは役に立ちません。

ファイルが存在するかどうかを事前にテストできることを知っています。スクリプトにこのようなエラーが多いので、そうしなくてもこのエラーをキャッチする方法があったらと思います。

答え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"

関連情報