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.