破折号中带有 .文件给出“未找到”错误

破折号中带有 .文件给出“未找到”错误

. file我正在尝试使用手册页指定的方式在破折号中获取(bash用语)文件:

 . 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

对于某些 shell,您需要./在前面放置 或 绝对路径:

. ./defaults.sh

请注意,您可能想要添加run.sh脚本的绝对路径,否则defaults.sh将从用户位置获取:

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

答案2

如果从 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

相关内容