/ / wbudowana powłoka z przekierowaniem - powłoka, unix

powłoka wbudowana z przekierowaniem - powłoka, unix

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.