从参数中包含外部文件时找不到文件。

从参数中包含外部文件时找不到文件。

我一定遗漏了一些关于将外部文件包含到我的 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.shshebang (即)。#!/bin/bash否则给出文件的路径

sh exec.sh ./env_local.config ebis_tag

相关内容