问题
shell脚本a.sh
如下:
#!/bin/bash
cd /home/
if [ -f b.sh ];then
source b.sh
fi
使用sh命令执行a.sh
:
[root@localhost home]# sh a.sh
a.sh: line 4: source: b.sh: file not found
原因分析
source 命令找filename是在当前Shell环境中从文件名读取并执行命令,如果filename不包含斜杠,则使用PATH中的文件名查找包含filename的目录。
使用man source查看source使用说明,其中:
source filename [arguments]
Read and execute commands from filename in the current shell environment and return the exit status of the last command exe-
cuted from filename. If filename does not contain a slash, file names in PATH are used to find the directory containing file-
name. The file searched for in PATH need not be executable. When bash is not in posix mode, the current directory is
searched if no file is found in PATH. If the sourcepath option to the shopt builtin command is turned off, the PATH is not
searched. If any arguments are supplied, they become the positional parameters when filename is executed. Otherwise the
positional parameters are unchanged. The return status is the status of the last command exited within the script (0 if no
commands are executed), and false if filename is not found or cannot be read.
解决方法
以下方式任选其一:
- 在source后的filename前加
./
- 在source后的filename前加上相对路径或绝对路径
- 将source的脚本所在的目录加到PATH中