Yanıtlar:
&
İçinde 2>&1
sadece numara söylüyor 1
bir dosya tanıtıcı değil, bir dosya adıdır. Bu durumda standard output file descriptor
.
Kullanırsanız 2>1
, bu, hataları adlı bir dosyaya yönlendirir, 1
ancak kullanırsanız 2>&1
, adresine gönderir standard output stream
.
Bu &>
iki göndermek diyor standard output
ve standard error
bir yerde. Örneğin ls <non-existent_file> &> out.file
,. Bunu bir örnekle açıklayayım.
Kurmak:
koko
Aşağıdaki içeriğe sahip bir dosya oluşturun :
#!bin/bash
ls j1
echo "koko2"
Yürütülebilir yap: chmod u+x koko
Şimdi bunun j1
olmadığını unutmayın
Şimdi koş ./koko &> output
koş cat output
ve göreceksin
ls: cannot access 'j1': No such file or directory
koko2
Hem standard error
( ls: cannot access 'j1': No such file or directory
) hem de standard output
( koko2
) dosyaya gönderildi output
.
Şimdi tekrar çalıştırın ama bu sefer şöyle:
./koko > output
Yapın cat output
ve sadece koko2
benzerlerini göreceksiniz . Ancak ls j1
komuttan hata çıktısı alınmaz . Bu, standard error
terminalinizde göreceğiniz adrese gönderilecektir.
@Byte Commander sayesinde önemli not:
İçinde olduğunu unutmayın command >file 2>&1
yönlendirme sırasına önemlidir. Eğer yazarsanız command 2>&1 >file
(istediğini normalde değil) yerine, ilk komut var yönlendirir stdout
o yönlendirmenin komut dosyasına ve sonra stderr
onun artık kullanılmayan için stdout
terminal görünecektir böylece, ve boru bunu could veya yönlendirebilen tekrar, ancak dosyaya yazılmaz.
command >file 2>&1
yönlendirmeler sırasına önemlidir. Eğer yazarsanız command 2>&1 >file
(istediğini normalde değil) yerine, ilk dosyaya komutun stdout'u yönlendirir ve o yönlendirmenin sonra şimdi kullanılmayan Stdout'a komutun Stderr, bu terminali görünecektir böylece ve boru bunu could veya yeniden yönlendirin, ancak dosyaya yazılmaz.
standard output
terminalinizde göreceğiniz yere gönderilecek ." bu "için" olmamalı standard error
mı?
> FILE 2>&1
ve &> FILE
eşdeğerdir. Bkz. 8.2.3.2. Hataların Yönlendirme içinde Başlayanlar Bölüm 8 için Bash Rehberi
&> FILE
sadece Bash'e özgüdür, oysa >FILE 2>&1
daha fazla sayıda kabuk tarafından anlaşılmaktadır.
[n]>&word
Denir Kopyalama Çıktı Dosya Tanıtıcı (bkz bölüm 2.7.6 POSIX Kabuk Dil Standardının). Bu özel davranış içeren kabuklar, Bourne benzeri özelliğidir ksh
, dash
ve bash
; Aslında, standart Bourne kabuğu ve ksh
. İçine bakıyor tcsh ve csh kılavuzları, onlar görünüşte ancak açıklamasında, herhangi bir dosya tanıtıcı çoğaltma yeteneği sağlamaz >&
, bu gibi davranan &>
içinde bash
(olduğunu yönlendirmeler hatalar ve dosyaya normal çıkış).
Ubuntu dahil olmak üzere * nix benzeri sistemlerde, genellikle her şeyin bir dosya olduğunu veya bir dosya tanımlayıcı olduğunu duyarsınız . Standart çıktı sabit dosya tanımlayıcı 1 ve standart hata dosya tanıtıcı 2. Yani olup, > FILE 2>&1
teknik olarak diğer bir deyişle dosya tanımlayıcı 1. üzerine yinelenen dosya tanıtıcı 2 demektir bu cevap :
2> & 1, kabuğa komuta tanımlayıcı 1'in kopyası olan bir dosya tanımlayıcı 2 vermesini söyler (yani stderr ve stdout aynı fd'yi gösterir).
Buradaki anahtar, önce tanımlayıcı 1'in ayarlanması gerektiğini belirtmektir. Kabuk yeniden yönlendirmeleri soldan sağa doğru işlediğinden command >FILE 2>&1
, kabuğa stdout'u önce command
girmesi için yeniden sarmasını söyler FILE
ve ancak o zaman tanımlayıcı 2 1'in kopyası olabilir, yani 1 ve 2 noktası aynı konuma - FILE
.
Bu elbette standart hatanın ve standart çıktının ötesine geçer. Bu cevapta gösterildiği gibi , yaparak3&>2
... filedescritor 2'yi filedescriptor 3'e kopyalarsınız (dup2), açıksa filedescriptor 3'ü kapatırsınız
Dosya tanımlayıcıları manipüle etmenin bir örneği, komut çıktısını değişkene yakalamak olabilirdialog
Ayrıca &>
özel olduğunu belirtmek gerekir bash
. Bu zsh
aynı şekilde davranır, ancak belgelere göre, "... multios varlığında '> word 2> & 1' ile aynı etkiye sahip değildir". POSIX uyumlu olarak /bin/sh
, bu komut arka plana koyarak düzenli yeniden yönlendirme olarak değerlendirilir. Ayrıca bkz. Sözdizimsel olarak geçerli bash kodu olmayan herhangi bir sh kodu var mı? .
Ayrıca bakınız:
&>
anlama geliyor?