Rozumiem, że exec
można wykonać przekierowanie we / wy w bieżącej powłoce, ale widzę tylko takie użycie, jak:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
Rozumiem, że <
to jest dla strumienia wejściowego, >
jest dla strumienia wyjściowego. Co więc robi exec 3<&1
?
PS: Znalazłem to z kodu źródłowego Batsa
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
źródło
źródło
exec 3<&1
różni się od3<&1
tego, że to drugie wpłynie na jedno polecenie, podczas gdy pierwsze wpływa na bieżącą powłokę.Odpowiedzi:
Od
bash manpage
:Zrobiłem kilka debugowania z
strace
:Dla
3<&1
:Dla
3>&1
:Dla
2>&1
:Wygląda na to, że
3<&1
robi dokładnie to samo, co3>&1
kopiowanie standardowego wejścia do deskryptora pliku 3.źródło
dup2()
jest używane dla każdego rodzaju deskryptora pliku; bash'sx>&y
vsx<&y
to po prostu cukier składniowy. Ponadto, gdy stdio jest podłączone do tty, urządzenie tty jest bardzo często otwierane do odczytu i zapisu i po prostu duplikowane od 0 do 1 i 2.exec 3<&1
to samo coexec >&3
?exec 3>&1
.