O script Bash não está herdando o env dos seus pais

3

Um título alternativo para essa pergunta seria:

"command recognized in parent shell is not found in subshell"

Eu tenho isso em um shell pai

source ~/.quicklock/ql.sh

e este comando é reconhecido no meu shell atual:

ql_acquire_lock

então eu corro um script assim:

./script/tsc.sh

nesse script, temos:

#!/usr/bin/env bash
set -e;
ql_acquire_lock

Eu devo estar muito confuso sobre como os shells funcionam, porque eu pensei que um shell / processo filho herdaria o env do pai, a menos que explicitamente chamasse unset, etc.?

Aqui está o erro que recebo:

./scripts/tsc.sh: line 3: ql_acquire_lock: command not found
    
por Alexander Mills 03.03.2018 / 22:40

1 resposta

4

Um shell filho herdará o ambiente do shell pai.

O ambiente conterá o que é exportado pelo shell pai.

Se a sua função de shell não for exportada, ela não existirá no ambiente da criança.

Uma função shell bash pode ser exportada para uso em um shell filho bash usando

export -f functionname

no shell pai.

    
por 03.03.2018 / 22:49