![破折号中带有 .文件给出“未找到”错误](https://linux22.com/image/205216/%E7%A0%B4%E6%8A%98%E5%8F%B7%E4%B8%AD%E5%B8%A6%E6%9C%89%20.%E6%96%87%E4%BB%B6%E7%BB%99%E5%87%BA%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E2%80%9D%E9%94%99%E8%AF%AF.png)
. 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