Ich verstehe, dass exec
die I / O-Umleitung für die aktuelle Shell ausgeführt werden kann, sehe aber nur die Verwendung wie folgt:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
Daraus verstehe ich, dass dies <
für den Eingabestream, >
für den Ausgabestream ist. Also, was macht exec 3<&1
man?
PS: Ich habe das aus dem Bats-Quellcode heraus gefunden
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
quelle
quelle
exec 3<&1
Unterschied3<&1
darin besteht, dass Letzterer einen einzelnen Befehl beeinflusst, während Ersterer die aktuelle Shell beeinflusst.Antworten:
Von
bash manpage
:Ich habe ein paar Debugs gemacht mit
strace
:Für
3<&1
:Für
3>&1
:Für
2>&1
:Dies entspricht anscheinend
3<&1
genau dem3>&1
Kopieren von stdout in Dateideskriptor 3.quelle
dup2()
Syscall für jede Art von Dateideskriptor verwendet. bashsx>&y
vsx<&y
ist nur syntax zucker. Wenn stdio an ein tty angeschlossen ist, wird das tty-Gerät sehr oft zum Lesen und Schreiben geöffnet und nur von 0 auf 1 und 2 dupliziert.exec 3<&1
ist das gleiche wieexec >&3
?exec 3>&1
.