Saya mengerti bahwa saya exec
bisa melakukan pengalihan I / O pada shell saat ini, tetapi saya hanya melihat penggunaan seperti:
exec 6<&0 # Link file descriptor #6 with stdin.
# Saves stdin.
exec 6>&1 # Link file descriptor #6 with stdout.
# Saves stdout.
Dari yang saya mengerti itu <
untuk aliran input, >
untuk aliran output. Jadi apa fungsinya exec 3<&1
?
PS: Saya menemukan ini dari kode sumber Bats
bash
shell
io-redirection
file-descriptors
exec
Zhenkai
sumber
sumber
exec 3<&1
berbeda dari3<&1
yang terakhir akan mempengaruhi satu perintah sedangkan yang pertama mempengaruhi shell saat ini.Jawaban:
Dari
bash manpage
:Saya melakukan beberapa debat dengan
strace
:Untuk
3<&1
:Untuk
3>&1
:Untuk
2>&1
:Tampaknya
3<&1
melakukan persis sama dengan3>&1
, menduplikasi stdout ke file descriptor 3.sumber
dup2()
syscall yang sama digunakan untuk segala jenis deskriptor file; bash'sx>&y
vsx<&y
hanyalah sintaksis gula. Juga, ketika stdio dilampirkan ke tty, perangkat tty sangat sering dibuka untuk baca + tulis dan hanya diduplikasi dari 0 ke 1 dan 2.exec 3<&1
sama denganexec >&3
?exec 3>&1
.