Variáveis ​​internas do bash de exportação automática


0

Preciso acessar algumas variáveis ​​internas do bash (BASH_LINENO, BASH_SOURCE) a partir de um comando chamado por um script de shell. A única interface possível entre meu comando e o script são variáveis ​​de ambiente. Existe alguma maneira de configurar o bash para tornar globais algumas variáveis ​​internas:

Exemplo:

myscript.sh
#!/bin/bash

# ... some scripting stuff ...

mycommand  # LINENO=4, BASH_SOURCE=([0]="myscript.sh")

# ... some other scripting stuff ...

Então, o que eu preciso é que quando o bash invoque meu comando; $ LINENO e $ BASH_SOURCE (variáveis ​​internas) tornam-se globais, para que meu comando acesse.

Não estou procurando comandos como:

declare -x LINENO

Como a LINENOmudança ao longo do tempo, se eu fizer isso, declare -x LINENOa nova variável global LINENOassume o valor de LINENO(interno) neste momento. Eu preciso que isso seja dinâmico, para que o global LINENOreflita o LINENOvalor de cada mudança.

Em palavras de programação: desejo alterar o escopo dessas variáveis ​​de interno para global ou criar algo como um ponteiro.


@ John1024, acabei de modificar a pergunta para adicionar informações. É a minha primeira vez aqui, por isso, pergunte novamente se você precisar de mais informações.
Nilp0inter

Muito bom. Você pode mycommandaceitar os argumentos da linha de comando como em mycommand "$LINENO" "${BASH_SOURCE[0]}"?
John1024

@ John1024, infelizmente não. A única interface entre mycommande o shell deve ser variáveis ​​de ambiente.
Nilp0inter

Que tal invocar mycommandcom uma linha como line=$LINENO src="$BASH_SOURCE[0]}" mycommande depois mycommandinspecionar a variável linee src?
John1024 #

@ John1024: Eu realmente quero evitar isso, porque força os usuários do mycommand a lembrarem todas as variáveis ​​necessárias ao mycommand. Mas se isso puder ser feito na forma de uma função ou alias para mycommand, se tornar transparente para o usuário de mycommand, seria perfeito.
Nilp0inter
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.