我一定遗漏了一些关于将外部文件包含到我的 bash 文件中的内容。
在我的场景中,我有以下命令
sh exec.sh env_local.conf ebis_tag
它显示了错误
exec.sh: 第 30 行: .: env_local.conf: 找不到文件
我的关注者执行命令脚本是:
#!/bin/bash
usage_exit() {
echo "Usage: $0 [-b] env_file_path project_name" 1>&2
exit 1
}
# default BANG_RUNNING="FALSE"
BANG_RUNNING="FALSE"
while getopts b OPT
do
case $OPT in
b) BANG_RUNNING="TRUE" ;;
¥?) usage_exit;
esac
done
shift $(($OPTIND - 1))
if [ $# -ne 2 ]; then
echo $#;
usage_exit;
fi
# import env_file
# CORE_HOST
# REF_HOST
# ADMASTER_HOST
. $1
执行命令和env_local.config位于同一目录中
[root@6d4f1e2363eb makedb]# ls -l
total 81
-rwxrwxrwx 1 1000 ftp 3381 Mar 14 09:03 admaster.sql
-rwxrwxrwx 1 1000 ftp 1675 Mar 29 03:02 ebisdata.sql
-rwxrwxrwx 1 1000 ftp 51278 Mar 29 02:16 ebis.sql
-rwxrwxrwx 1 1000 ftp 83 Mar 29 02:18 env_local.conf
-rwxrwxrwx 1 1000 ftp 93 Mar 14 09:03 env_stg.conf
-rwxrwxrwx 1 1000 ftp 7233 Mar 29 03:01 exec.sh
-rwxrwxrwx 1 1000 ftp 5854 Mar 14 09:03 README.md
-rwxrwxrwx 1 1000 ftp 10481 Mar 14 09:03 refdb.sql
drwxrwxrwx 1 1000 ftp 0 Mar 14 09:03 update
[root@6d4f1e2363eb makedb]#
我错过了什么?
答案1
您正在使用 运行脚本sh
,而不是 bash。 (sh
可能是bash
,但当运行时sh
,它在不同的规则下运行。)
当使用 获取文件时. something
,如果something
不是绝对或相对路径而只是文件名,则对于 POSIX shell:
如果 file 不包含
<slash>
,shell 将使用 指定的搜索路径来PATH
查找包含文件的目录。然而,与普通命令搜索不同的是,点实用程序搜索的文件不需要是可执行的。如果没有找到可读文件,非交互式 shell 将中止;交互式 shell 应将诊断消息写入标准错误,但这种情况不应被视为语法错误。
Bash 还会在当前目录中查找该文件。使用bash
、 notsh
或 do运行脚本,以便使用./exec.sh
shebang (即)。#!/bin/bash
否则给出文件的路径
sh exec.sh ./env_local.config ebis_tag