Pracujemy nad powłoką (projekt szkolny). Nie rozumiemy zachowania. Dlaczego moduły wbudowane nie działają po przekierowaniu?
lubić
cd - | command
nie zmienia katalogu.
lub
export NAME=VALUE | command
nie tworzy zmiennej.
Dziękuję Ci.
Odpowiedzi:
3 dla odpowiedzi № 1Łącza potoku są uruchamiane w rozwidlonych podpowłokach.
W bash możesz wydrukować PID bieżącego procesu za pomocą $ BASHPID, więc coś takiego:
self(){ echo $BASHPID; } ; self ; self >&2 | self; self
powinien dać ci coś takiego:
12849
12851
12852
12849
przy środkowych dwóch identyfikatorach PID różniących się od pierwszego i ostatniego (powłoki macierzystej) (w niektórych powłokach pierwszy lub ostatni link jest uruchamiany w powłoce matki, ale nie w bashu).
Zmiana bieżącego katalogu lub wyeksportowanie wartości w podpowłoce nie wpłynie w żaden sposób na powłokę rodzica.
0 dla odpowiedzi nr 2
Myślę, że "mylisz rury" z "średniki ";" podczas tworzenia toolchains. Rury służą do przekazywania stdout jednego polecenia na standardowe wejście innego. Średniki służą do uruchamiania jednego polecenia po drugim w tej samej powłoce.
Dlatego aby wejść do jakiegoś katalogu i wyświetlić jego zawartość, wykonaj następujące czynności:
cd somedir; ls
zwykle w Linuksie są wszystkie procesy potokuuruchomione w tym samym czasie w podpowłoki, z ich strumieniami odpowiednio połączone i zarządzane przez harmonogram wraz z wszystkimi innymi procesami uruchomionymi na komputerze. Ich wyjścia są ponownie podłączane przez bufory i synchronizowane
Dlatego nie widać zmian export
Polecenie, ponieważ zmienna pozostała w podpowiedzi potomnej.