A obtenção de um script contendo 'echo $ {BASH_SOURCE [0]}' ainda mostra o nome do caminho do script de origem

2

Eu tenho um script bash, que gera o nome do caminho do próprio script

$ cat f4.sh 
#! /bin/bash    
echo "${BASH_SOURCE[0]}"

Eu imagino que se eu fonte o script em outro script e execute o outro script, ele mostrará o nome do caminho do outro script, porque o sourcing é como copiar o conteúdo do script de origem para o script de sourcing e executar o sourcing roteiro.

Mas estou errado e ainda exibe o nome do caminho do script original

$ cat ff.sh 
#! /bin/bash
source ../f4.sh

$ bash ff.sh 
../f4.sh

Por quê?

Eu queria saber se é possível que outro script exiba seu nome de caminho usando f4.sh em vez de usar diretamente ${BASH_SOURCE[0]} ? Obrigado.

    
por Tim 14.11.2018 / 22:26

1 resposta

2

Nesta situação, se você quisesse obter o nome do caminho do script principal em BASH_SOURCE , você teria que usar ${BASH_SOURCE[1]} .

Para cada nível de fornecimento, um novo elemento é adicionado ao início da matriz BASH_SOURCE , para que ${BASH_SOURCE[0]} seja sempre o arquivo de origem atual e ${BASH_SOURCE[1]} o que é foi originado de (e ${BASH_SOURCE[2]} o que ele foi originado, se foi originado). Para chegar ao script principal, veja ${BASH_SOURCE[-1]} , o último elemento.

O fornecimento de um script não copia completamente o conteúdo do script no script principal. É como executando um script comum, mas é executado no mesmo ambiente que o script principal. É mais parecido com a execução de uma função.

    
por 14.11.2018 / 22:34

Tags