Shell-Script

用 .文件給出“未找到”錯誤

  • April 27, 2022

我正在嘗試使用. file手冊頁指定的破折號獲取(bash-parlance)文件:

 . 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使用互動式破折號時,也會發生同樣的事情。

我在哪裡錯了?

對於某些shell,您需要./在前面放置或絕對路徑:

. ./defaults.sh

請注意,您可能要添加腳本的絕對路徑run.sh,否則defaults.sh將來自使用者的位置:

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

如果從 run.sh 和 defaults.sh 文件所在的目錄執行“dash run.sh”,請嘗試將 $PWD 添加到 PATH。

在我的測試中,我看到了這些結果:

# 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

將 $PWD 添加到 PATH 後的結果:

# dash run.sh
VAR: abc

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