Automatyczny eksport zmiennych wewnętrznych


0

Muszę uzyskać dostęp do niektórych zmiennych wewnętrznych bash (BASH_LINENO, BASH_SOURCE) z polecenia wywołanego przez skrypt powłoki. Jedynym możliwym interfejsem między moim poleceniem a skryptem są zmienne środowiskowe. Czy jest jakiś sposób na skonfigurowanie basha w celu wprowadzenia globalnych zmiennych wewnętrznych:

Przykład:

myscript.sh
#!/bin/bash

# ... some scripting stuff ...

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

# ... some other scripting stuff ...

Więc potrzebuję tego, gdy bash wywołuje mycommand; $ LINENO i $ BASH_SOURCE (zmienne wewnętrzne) stają się globalne, aby moje polecenie miało do nich dostęp.

Nie szukam poleceń takich jak:

declare -x LINENO

Bo LINENO zmienia się z czasem, jeśli to zrobię declare -x LINENO nowa zmienna globalna LINENO przyjmuje wartość LINENO (wewnętrzny) w tym momencie. Potrzebuję tego, aby był dynamiczny, więc globalny LINENO odzwierciedla LINENO wartość w każdej zmianie.

W słowach programistycznych: chcę zmienić zakres tych zmiennych z wewnętrznego na globalny lub zrobić coś w rodzaju wskaźnika.


@ John1024, właśnie zmodyfikowałem pytanie, aby dodać informacje. To mój pierwszy raz tutaj, więc proszę pytać ponownie, jeśli potrzebujesz więcej informacji.
nilp0inter

Bardzo dobrze. Czy twój mycommand być przystosowanym do akceptowania argumentów linii poleceń jak w mycommand "$LINENO" "${BASH_SOURCE[0]}"?
John1024

@ John1024, niestety nie. Jedyny interfejs między mycommand a powłoka musi być zmiennymi środowiskowymi.
nilp0inter

Jak o wywołaniu mycommand z taką linią line=$LINENO src="$BASH_SOURCE[0]}" mycommand a potem mieć mycommand sprawdź line i src zmienna?
John1024

@ John1024: Naprawdę chcę tego uniknąć, ponieważ zmusza to użytkowników mycommandu do zapamiętywania wszystkich zmiennych wymaganych przez mycommand. Ale jeśli można to zrobić w formie funkcji lub aliasu dla mycommand, to staje się przezroczyste dla użytkownika mycommand byłoby idealnie.
nilp0inter
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.