Kiedy używamy set -k
opcji w bash?
Podręcznik referencyjny Bash mówi:
Wszystkie argumenty w postaci instrukcji przypisania są umieszczane w środowisku dla polecenia, nie tylko te poprzedzające nazwę polecenia.
Rozumiem, co robi ta opcja, ale nie mogłem sobie wyobrazić, kiedy jej potrzebujemy.
-k
Pozwala nam uruchomić 30-letni skrypty powłoki bez konieczności ich byłaby. Zamiast tegovar1=x var2=y command ...
Odpowiedzi:
Zasadniczo możesz go użyć w dowolnym momencie, kiedy chcesz „wstrzyknąć” zmienne środowiskowe przekazane do skryptu powłoki (jako argumenty) tak, jakby były ustawione w środowisku przez
export
, ale bez konieczności stałego umieszczania ich naexport
liście przed uruchomieniem poleceń .UWAGA: Istnieje również długa forma
-k
przełącznikaset -o keyword
.Przykład
Teraz jeśli
set -k
:Ale gdybym tylko uruchomił powyższy skrypt:
Co robi eksport?
Więc jeśli mielibyśmy dodać
export | grep VAR
do naszego skryptu w ten sposób:I ponownie przeprowadziliśmy powyższe testy:
Ale bez
set -k
:Więc
set -k
pozwala nam tymczasowo wyeksportować zmienne w masie.Inny przykład
Kiedy ustawiamy wiele zmiennych, wszystkie są eksportowane:
Więc to tylko wstrzyknięcie wszystkich zmiennych środowiskowych?
Nie
-k
robi tutaj bardzo wyraźnej rzeczy. To tylko eksportowanie zmiennych, które były zawarte w wierszu poleceń, gdy polecenie zostało wykonane.Przykład
Powiedzmy, że ustawiłem tę zmienną:
Teraz, gdy uruchomimy to samo polecenie, pomijając
VARCMD1="hi"
:Ale dlaczego to istnieje?
Znalazłem to źródło, które trochę wyjaśnia tę funkcję, zatytułowane: „Ciągi parametrów przypisania parametru słowa kluczowego”. UWAGA: źródłowy adres URL używa adresu IP, więc nie mogę połączyć się z nim bezpośrednio tutaj w SE.
źródło
set -k
ponieważ podali-o keyword
oprócz-k
opcji. Czy to coś znaczy?set -o keyword
jest długą formąset -k
. Zobaczyćhelp set | grep -- '-k'
../cmd.bash VARCMD=hi
musiset -k
sprawić, aby działał dokładnie tak, jakVARCMD=hi ./cmd.bash
robi to bezset -k
. Zgadnij, konkretne pytanie OP dotyczy potrzeby bash do obsługi./cmd.bash VARCMD=hi
formularzaKażde praktyczne użycie
set -k
jest prawdopodobnie tylko osobistym stylem. Niektórzy - być może ci, którzy lubią języki programowania, które oferują możliwość używania argumentów słów kluczowych w wywołaniach funkcji, lub ci nieliczni, którzy lubiądd
składnię polecenia - mogą preferowaćdo
Rzeczywisty powód, dla którego opcja istnieje w niektórych powłokach, wyjaśniono w uzasadnieniu polecenia set w standardzie POSIX :
źródło