ダッシュに.があるファイルに「見つかりません」エラーが発生します。

ダッシュに.があるファイルに「見つかりません」エラーが発生します。

. fileマニュアルページで指定された方法を使用してダッシュにファイルをインポートしようとしています。

 . file
        The commands in the specified file are read and executed by the
        shell.

ただし、ファイルを使用してもエラーが発生します。お持ちですか?:

$ ls
defaults.sh  run.sh
$ cat run.sh 
#!/bin/sh

. defaults.sh

echo "VAR: $VAR"
$ cat defaults.sh 
VAR=abc
$ bash run.sh 
VAR: abc
$ dash run.sh 
run.sh: 3: .: defaults.sh: not found

. defaults.sh対話型ダッシュを使用しても同じことが起こります。

ここで私はどこで間違っていますか?

答え1

./一部のシェルでは、前に追加のパスまたは絶対パスが必要です。

. ./defaults.sh

追加したいかもしれません。run.shスクリプトの絶対パス、そうでない場合は、defaults.shユーザーの場所から取得されます。

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
. "$SCRIPT_DIR"/defaults.sh

答え2

run.shファイルとdefaults.shファイルと同じディレクトリで「dash run.sh」を実行している場合は、PATHに$ PWDを追加してみてください。

私のテストでは、次のような結果を確認しました。

# dash run.sh
run.sh: 3: .: defaults.sh: not found

その後、次の手順を実行しました。

# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# export PATH=$PATH:$PWD

PATHに$ PWDを追加した後の結果:

# dash run.sh
VAR: abc

関連情報