Arquivo não encontrado quando incluir o arquivo externo do argumento. [Bash]

0

Eu devo estar faltando alguma coisa sobre incluir arquivo externo no meu arquivo bash.

No meu cenário, tenho o seguinte comando

sh exec.sh env_local.conf ebis_tag

Mostrou o erro

exec.sh: line 30: .: env_local.conf: file not found

Meu script exec.sh é:

#!/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

exec.sh e env_local.config estão no mesmo diretório

[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]#

Eu senti falta de algo?

    
por Van Le 29.03.2018 / 05:21

1 resposta

2

Você está executando o script com sh , não bash. ( sh pode ser bash , mas quando executado como sh , ele opera sob regras diferentes.)

Ao fazer o sourcing de um arquivo com . something , se something não for um caminho absoluto ou relativo, mas apenas um nome de arquivo, então para um shell POSIX :

If file does not contain a <slash>, the shell shall use the search path specified by PATH to find the directory containing file. Unlike normal command search, however, the file searched for by the dot utility need not be executable. If no readable file is found, a non-interactive shell shall abort; an interactive shell shall write a diagnostic message to standard error, but this condition shall not be considered a syntax error.

O Bash também procura pelo arquivo no diretório atual. Execute o script com bash , não sh ou ./exec.sh , para que seja usado o shebang (que é #!/bin/bash ). Caso contrário, dê um caminho para o arquivo

sh exec.sh ./env_local.config ebis_tag
    
por 29.03.2018 / 05:33