Kabukta ÔÇť2> & 1ÔÇŁ ne anlama geliyor?


Al─▒nan cevaba git


Bir Unix kabu─čunda daha fazla manip├╝lasyon i├žin birle┼čtirmek stderr ve ak─▒┼č stdout i├žine stdout eklemek istersem, komutumun sonuna a┼ča─č─▒dakileri ekleyebilirim:

 2>&1
 

Yani, head ├ž─▒kt─▒dan kullanmak g++ istersem ┼č├Âyle bir ┼čey yapabilirim:

 g++ lots_of_errors 2>&1 | head
 

bu y├╝zden sadece ilk birka├ž hatay─▒ g├Ârebiliyorum.

Bunu hat─▒rlamakta her zaman sorun ya┼č─▒yorum ve s├╝rekli yukar─▒ bakmam gerekiyor ve bunun sebebi, bu hilenin s├Âzdizimini tam olarak anlamad─▒─č─▒m.

Birisi bunu par├žalay─▒p karakteri karakterle a├ž─▒klayabilir 2>&1 mi?


2098









Cevap say─▒s─▒n─▒ say: 15






Dosya tan─▒t─▒c─▒s─▒ 1 standart ├ž─▒kt─▒d─▒r ( stdout ).
Dosya tan─▒mlay─▒c─▒s─▒ 2 standart hatad─▒r ( stderr ).

─░┼čte bu yap─▒y─▒ hat─▒rlaman─▒n bir yolu (tamamen do─čru olmasa da): ─░lk ba┼čta, 2>1 y├Ânlendirmek stderr i├žin iyi bir yol gibi g├Âr├╝nebilir stdout . Ancak, asl─▒nda " stderr adl─▒ bir dosyaya y├Ânlendir" olarak yorumlanacakt─▒r 1 . & a┼ča─č─▒dakilerin bir dosya tan─▒t─▒c─▒s─▒ oldu─čunu ve bir dosya ad─▒ olmad─▒─č─▒n─▒ belirtir. Yani yap─▒ haline gelir: 2>&1 .


2337







 echo test > afile.txt
 

stdout'u y├Ânlendirir afile.txt . Bu yapmakla ayn─▒ ┼čey

 echo test 1> afile.txt
 

Stderr'i y├Ânlendirmek i├žin:

 echo test 2> afile.txt
 

>& bir ak─▒┼č─▒ ba┼čka bir dosya tan─▒mlay─▒c─▒s─▒na y├Ânlendirecek s├Âzdizimi - 0 stdin, 1 stdout ve 2 stderr'dir.

Yaparak stdout komutunu stderr dosyas─▒na y├Ânlendirebilirsiniz:

 echo test 1>&2 # or echo test >&2
 

Ya da tam tersi:

 echo test 2>&1
 

Yani, k─▒sacas─▒ ... 2> stderr'i (belirtilmemi┼č) bir dosyaya &1 y├Ânlendirir, stderr'i stdout'a y├Ânlendirir.


578


2009-05-03





Y├Ânlendirme hakk─▒nda baz─▒ p├╝f noktalar─▒

Bununla ilgili baz─▒ s├Âzdizimi ├Âzelliklerinin ├Ânemli davran─▒┼člar─▒ olabilir. Y├Ânlendirmeler, hakk─▒nda baz─▒ k├╝├ž├╝k ├Ârnekler vard─▒r STDERR , STDOUT ve arg├╝manlar sipari┼č .

1 - ├ťzerine yazma veya ekleme?

Sembol > ortalama y├Ânlendirme .

  • > ortalama bir b├╝t├╝n tamamlanan dosya olarak i├žin g├Ânderme , ├╝zerine yaz─▒lmas─▒n─▒ hedef ise exist (bkz noclobber de bash ├Âzelli─čini 3. sonras─▒).
  • >> ek olarak ortalama g├Ânderme, e─čer varsa hedefe eklenir.

Her durumda, dosya yoksa, olu┼čturulur.

2 - Kabuk komut sat─▒r─▒ sipari┼če ba─čl─▒ !!

Bunu test etmek i├žin her iki ├ž─▒k─▒┼čta da bir ┼čeyler g├Ânderecek olan basit bir komuta ihtiyac─▒m─▒z var :

 $ ls -ld /tmp /tnt
ls: cannot access /tnt: No such file or directory
drwxrwxrwt 118 root root 196608 Jan  7 11:49 /tmp

$ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory

$ ls -ld /tmp /tnt 2>/dev/null
drwxrwxrwt 118 root root 196608 Jan  7 11:49 /tmp
 

( /tnt Elbette, ad─▒nda bir dizininiz olmad─▒─č─▒n─▒ umarak ;). Eh, biz var !!

├ľyleyse g├Ârelim:

 $ ls -ld /tmp /tnt >/dev/null
ls: cannot access /tnt: No such file or directory

$ ls -ld /tmp /tnt >/dev/null 2>&1

$ ls -ld /tmp /tnt 2>&1 >/dev/null
ls: cannot access /tnt: No such file or directory
 

Son komut sat─▒r─▒ STDERR konsola d├Âk├╝l├╝yor ve beklenen davran─▒┼č gibi g├Âz├╝km├╝yor ... Ama ...

Bir ├ž─▒kt─▒yla ilgili bir yaz─▒ filtreleme yapmak istiyorsan─▒z , di─čeri ya da ikisi:

 $ ls -ld /tmp /tnt | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory
<-- drwxrwxrwt 118 root root 196608 Jan  7 12:02 /tmp --->

$ ls -ld /tmp /tnt 2>&1 | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
<-- drwxrwxrwt 118 root root 196608 Jan  7 12:02 /tmp --->

$ ls -ld /tmp /tnt >/dev/null | sed 's/^.*$/<-- & --->/'
ls: cannot access /tnt: No such file or directory

$ ls -ld /tmp /tnt >/dev/null 2>&1 | sed 's/^.*$/<-- & --->/'

$ ls -ld /tmp /tnt 2>&1 >/dev/null | sed 's/^.*$/<-- & --->/'
<-- ls: cannot access /tnt: No such file or directory --->
 

Bu paragraftaki son komut sat─▒r─▒n─▒n, ├Ânceki paragraftakiyle tamamen ayn─▒ oldu─čuna dikkat edin; burada yazd─▒─č─▒m beklenen davran─▒┼č gibi g├Âr├╝nm├╝yor (bu beklenen bir davran─▒┼č bile olabilir).

Her iki ├ž─▒k─▒┼čta da farkl─▒ i┼člemler yapmak i├žin y├Ânlendirmeler hakk─▒nda k├╝├ž├╝k hileler var :

 $ ( ls -ld /tmp /tnt | sed 's/^/O: /' >&9 ) 9>&2  2>&1  | sed 's/^/E: /'
O: drwxrwxrwt 118 root root 196608 Jan  7 12:13 /tmp
E: ls: cannot access /tnt: No such file or directory
 

Nota: &9 tan─▒mlay─▒c─▒ nedeniyle kendili─činden ortaya ├ž─▒kar ) 9>&2 .

Zeyilname: nota! Bash ( >4.0 ) s├╝r├╝m├╝yle bu t├╝r ┼čeyleri yapmak i├žin yeni bir ├Âzellik ve daha seksi s├Âzdizimi vard─▒r:

 $ ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /')
O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
E: ls: cannot access /tnt: No such file or directory
 

Ve nihayet b├Âyle bir basamakl─▒ ├ž─▒kt─▒ formatlamas─▒ i├žin:

 $ ((ls -ld /tmp /tnt |sed 's/^/O: /' >&9 ) 2>&1 |sed 's/^/E: /') 9>&1| cat -n
     1  O: drwxrwxrwt 118 root root 196608 Jan  7 12:29 /tmp
     2  E: ls: cannot access /tnt: No such file or directory
 

Zeyilname: nota! Her iki ┼čekilde de ayn─▒ yeni s├Âzdizimi:

 $ cat -n <(ls -ld /tmp /tnt 2> >(sed 's/^/E: /') > >(sed 's/^/O: /'))
     1  O: drwxrwxrwt 17 root root 28672 Nov  5 23:00 /tmp
     2  E: ls: cannot access /tnt: No such file or directory
 

Nerede STDOUT , belirli bir filtreden ge├žmesi STDERR birbirlerine ve nihayet her iki ├ž─▒k─▒┼člar─▒ ├╝├ž├╝nc├╝ komut filtre ile gitmek birle┼čti.

3 - noclobber Se├ženek ve >| s├Âzdizimi hakk─▒nda bir kelime

Bu ├╝zerine yazmakla ilgili :

─░ken set -o noclobber talimat bash i├žin de─čil varolan herhangi dosyan─▒n ├╝zerine, >| s├Âzdizimi, bu s─▒n─▒rlama ge├žmesine izin:

 $ testfile=$(mktemp /tmp/testNoClobberDate-XXXXXX)

$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:15 CET 2013

$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:19 CET 2013

$ date > $testfile ; cat $testfile
Mon Jan  7 13:18:21 CET 2013
 

Dosyan─▒n ├╝zerine ┼čimdi her defas─▒nda yaz─▒l─▒r:

 $ set -o noclobber

$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan  7 13:18:21 CET 2013

$ date > $testfile ; cat $testfile
bash: /tmp/testNoClobberDate-WW1xi9: cannot overwrite existing file
Mon Jan  7 13:18:21 CET 2013
 

┼×ununla ge├žmek >| :

 $ date >| $testfile ; cat $testfile
Mon Jan  7 13:18:58 CET 2013

$ date >| $testfile ; cat $testfile
Mon Jan  7 13:19:01 CET 2013
 

Bu se├žene─čin kald─▒r─▒lmas─▒ ve / veya ├Ânceden ayarlanm─▒┼č olup olmad─▒─č─▒n─▒ sormak.

 $ set -o | grep noclobber
noclobber           on

$ set +o noclobber

$ set -o | grep noclobber
noclobber           off

$ date > $testfile ; cat $testfile
Mon Jan  7 13:24:27 CET 2013

$ rm $testfile
 

4 - Son numara ve daha fazlas─▒ ...

Her iki ├ž─▒kt─▒n─▒n belirli bir komuttan y├Ânlendirilmesi i├žin , do─čru bir s├Âz diziminin olabilece─čini g├Âr├╝yoruz:

 $ ls -ld /tmp /tnt >/dev/null 2>&1
 

bu ├Âzel durum i├žin k─▒sayol s├Âzdizimi vard─▒r: &> ... veya >&

 $ ls -ld /tmp /tnt &>/dev/null

$ ls -ld /tmp /tnt >&/dev/null
 

Bilginize: varsa 2>&1 , 1>&2 do─čru bir s├Âzdizimi de var:

 $ ls -ld /tmp /tnt 2>/dev/null 1>&2
 

4b- ┼×imdi, ┼čunu d├╝┼č├╝nmenize izin verece─čim:

 $ ls -ld /tmp /tnt 2>&1 1>&2  | sed -e s/^/++/
++/bin/ls: cannot access /tnt: No such file or directory
++drwxrwxrwt 193 root root 196608 Feb  9 11:08 /tmp/

$ ls -ld /tmp /tnt 1>&2 2>&1  | sed -e s/^/++/
/bin/ls: cannot access /tnt: No such file or directory
drwxrwxrwt 193 root root 196608 Feb  9 11:08 /tmp/
 

4c- Daha fazla bilgi ile ilgileniyorsan─▒z

─░nce el kitab─▒n─▒ vurarak okuyabilirsiniz:

 man -Len -Pless\ +/^REDIRECTION bash
 

bir bash konsolunda ;-)


305







Y├Ânlendirmede bu m├╝kemmel yaz─▒y─▒ buldum: Y├Ânlendirme hakk─▒nda her ┼čey

Hem standart ├ž─▒kt─▒y─▒ hem de standart hatay─▒ bir dosyaya y├Ânlendirin

$ command &> dosyas─▒

Bu tek astar, &> her iki ├ž─▒kt─▒ ak─▒┼č─▒n─▒ - stdout ve stderr - komutundan dosyaya y├Ânlendirmek i├žin i┼čleci kullan─▒r . Bu, Bash'in her iki ak─▒┼č─▒ da ayn─▒ hedefe h─▒zla yeniden y├Ânlendiren k─▒sa yoldur.

Dosya tan─▒mlay─▒c─▒ tablosu, Bash'in her iki ak─▒┼č─▒ da yeniden y├Ânlendirdikten sonra nas─▒l g├Âr├╝nd├╝─č├╝n├╝ ┼č├Âyle g├Âsterir:


Resim tan─▒m─▒n─▒ buraya girin

G├Ârd├╝─č├╝n├╝z gibi, hem stdout hem de stderr ┼čimdi i┼čaret ediyor file . Yani stdout ve stderr'e yaz─▒lan her ┼čey yaz─▒l─▒r file .

Her iki ak─▒┼č─▒ da ayn─▒ hedefe y├Ânlendirmenin birka├ž yolu vard─▒r. Her ak─▒┼č─▒ birbiri ard─▒na y├Ânlendirebilirsiniz:

$ command> dosya 2> & 1

Bu, her iki ak─▒┼č─▒ bir dosyaya y├Ânlendirmek i├žin ├žok daha yayg─▒n bir yoldur. ─░lk ├Ânce stdout dosyaya y├Ânlendirilir ve ard─▒ndan stderr, stdout ile ayn─▒ olacak ┼čekilde ├žo─čalt─▒l─▒r. B├Âylece her iki ak─▒┼č da i┼čaret ediyor file .

Bash birka├ž y├Ânlendirmeyi g├Ârd├╝─č├╝nde bunlar─▒ soldan sa─ča i┼čler. Ad─▒mlardan ge├želim ve nas─▒l olaca─č─▒n─▒ g├Ârelim. Herhangi bir komut ├žal─▒┼čt─▒rmadan ├Ânce, Bash'in dosya tan─▒mlay─▒c─▒ tablosu ┼čuna benzer:


Resim tan─▒m─▒n─▒ buraya girin

┼×imdi Bash, ilk y├Ânlendirme> dosyas─▒n─▒ i┼čler. Bunu daha ├Ânce g├Ârd├╝k ve dosyaya atma noktas─▒n─▒ g├Âsteriyor:


Resim tan─▒m─▒n─▒ buraya girin

Sonraki Bash ikinci y├Ânlendirmeyi 2> & 1 olarak g├Âr├╝r. Bu y├Ânlendirmeyi daha ├Ânce g├Ârmemi┼čtik. Bu bir dosya tan─▒mlay─▒c─▒ 2'yi, dosya tan─▒mlay─▒c─▒ 1'in bir kopyas─▒ olarak ├žo─čalt─▒r ve ┼čunu al─▒r─▒z:


Resim tan─▒m─▒n─▒ buraya girin

Her iki ak─▒┼č da dosyaya y├Ânlendirildi.

Ancak burada dikkatli olun! yaz─▒

komut> dosya 2> & 1

yaz─▒ ile ayn─▒ de─čildir:

$ command 2> & 1> dosya

Y├Ânlendirme s─▒ras─▒ Bash'de ├Ânemli! Bu komut yaln─▒zca standart ├ž─▒kt─▒y─▒ dosyaya y├Ânlendirir. Stderr hala terminale yazd─▒r─▒r. Bunun neden oldu─čunu anlamak i├žin, yine ad─▒mlardan ge├želim. Komutu ├žal─▒┼čt─▒rmadan ├Ânce, dosya tan─▒mlay─▒c─▒ tablosu ┼č├Âyle g├Âr├╝n├╝r:


Resim tan─▒m─▒n─▒ buraya girin

┼×imdi Bash, y├Ânlendirmeleri soldan sa─ča i┼čler. ├ľnce 2> & 1'i g├Âr├╝r, b├Âylece stderr'yi stdout'a kopyalar. Dosya tan─▒mlay─▒c─▒ tablosu ┼ču ┼čekilde olur:


Resim tan─▒m─▒n─▒ buraya girin

┼×imdi Bash ikinci y├Ânlendirmeyi g├Âr├╝r >file ve stdout'u dosyaya y├Ânlendirir:


Resim tan─▒m─▒n─▒ buraya girin

Burada ne oldu─čunu g├Âr├╝yor musun? Stdout ┼čimdi dosyaya i┼čaret ediyor, ancak stderr hala terminale i┼čaret ediyor! Stderr'e yaz─▒lan her ┼čey hala ekrana yazd─▒r─▒l─▒yor! Bu y├╝zden y├Ânlendirmelerin s─▒ras─▒na ├žok ama ├žok dikkat edin!

Ayr─▒ca, BashÔÇÖin yaz─▒ yazd─▒─č─▒n─▒

$ command &> dosyas─▒

tam olarak ayn─▒d─▒r:

$ command> & dosyas─▒


98







Rakamlar dosya tan─▒mlay─▒c─▒lar─▒na (fd) at─▒fta bulunur.

  • S─▒f─▒r stdin
  • Biri stdout
  • ─░ki stderr

2>&1 fd 2 ila 1'i y├Ânlendirir.

Program bunlar─▒ kullan─▒yorsa, herhangi bir say─▒da dosya tan─▒t─▒c─▒s─▒ i├žin ├žal─▒┼č─▒r.

/usr/include/unistd.h Onlar─▒ unutursan─▒z bakabilirsiniz :

 /* Standard file descriptors.  */
#define STDIN_FILENO    0   /* Standard input.  */
#define STDOUT_FILENO   1   /* Standard output.  */
#define STDERR_FILENO   2   /* Standard error output.  */
 

├ľzel g├╝nl├╝─če kaydetme i├žin standart olmayan dosya tan─▒mlay─▒c─▒lar─▒ kullanan C ara├žlar─▒ yazd─▒m, bu y├╝zden bir dosyaya veya ba┼čka bir ┼čeye y├Ânlendirmeden onu g├Âremezsiniz.


78







Bu yap─▒ standart hata ak─▒m─▒n─▒ ( stderr ) standart ├ž─▒kt─▒ ( ) ' n─▒n ge├žerli konumuna g├Ânderir stdout - bu para birimi sorunu di─čer cevaplar taraf─▒ndan ihmal edilmi┼č gibi g├Âr├╝nmektedir.

Bu y├Ântemi kullanarak herhangi bir ├ž─▒kt─▒ tutamac─▒n─▒ di─čerine y├Ânlendirebilirsiniz, ancak ├žo─čunlukla i┼čleme stdout ve stderr ak─▒┼č i├žin tek bir ak─▒┼ča kanalize etmek ve ak─▒┼člar─▒ kullanmak i├žin kullan─▒l─▒r .

Baz─▒ ├Ârnekler:

 # Look for ERROR string in both stdout and stderr.
foo 2>&1 | grep ERROR

# Run the less pager without stderr screwing up the output.
foo 2>&1 | less

# Send stdout/err to file (with append) and terminal.
foo 2>&1 |tee /dev/tty >>outfile

# Send stderr to normal location and stdout to file.
foo >outfile1 2>&1 >outfile2
 

Bu sonuncusu olaca─č─▒ Not de─čil do─črudan stderr i├žin outfile2 - ne i├žin y├Ânlendirir stdout arg├╝man kar┼č─▒la┼č─▒ld─▒ zaman (idi outfile1 ) ve daha sonra y├Ânlendirir stdout i├žin outfile2 .

Bu, baz─▒ olduk├ža karma┼č─▒k kand─▒rmacalara izin verir.


55







2>&1 POSIX kabuk yap─▒s─▒d─▒r. ─░┼čte belirteci taraf─▒ndan belirtilmi┼č bir d├Âk├╝m:


2 : " Standart hata " ├ž─▒kt─▒ dosyas─▒ tan─▒mlay─▒c─▒s─▒.

>& : Bir ├ç─▒kt─▒ Dosya Tan─▒mlay─▒c─▒s─▒ i┼člecini ( ├ç─▒kt─▒ Y├Ânlendirme i┼člecinin bir de─či┼čkeni) ├žo─čalt─▒n > . Verilen [x]>&[y] , belirtilen dosya tan─▒mlay─▒c─▒s─▒ x , ├ž─▒kt─▒ dosya tan─▒mlay─▒c─▒s─▒n─▒n bir kopyas─▒ olarak yap─▒l─▒r y .

1 " Standart ├ž─▒kt─▒ " ├ž─▒kt─▒ dosyas─▒ tan─▒mlay─▒c─▒s─▒.

─░fade, 2>&1 dosya tan─▒mlay─▒c─▒s─▒n─▒ 1 konuma kopyalar 2 , bu nedenle 2 y├╝r├╝tme ortam─▒ndaki ("standart hata") yaz─▒lan t├╝m ├ž─▒kt─▒lar 1 ("standart ├ž─▒kt─▒") taraf─▒ndan orijinal olarak a├ž─▒klanan ayn─▒ dosyaya gider .


Daha fazla a├ž─▒klama:

Dosya Tan─▒mlay─▒c─▒s─▒ : "Dosya eri┼čimi amac─▒yla a├ž─▒k bir dosyay─▒ tan─▒mlamak i├žin kullan─▒lan, i┼člem ba┼č─▒na benzersiz, negatif olmayan bir tam say─▒."

Standart ├ž─▒kt─▒ / hata : Kabuk belgelerinin Yeniden Y├Ânlendirilmesi b├Âl├╝m├╝ndeki a┼ča─č─▒daki nota bak─▒n :

A├ž─▒k dosyalar, s─▒f─▒r ile ba┼člayan ondal─▒k say─▒larla temsil edilir. M├╝mk├╝n olan en b├╝y├╝k de─čer uygulama tan─▒ml─▒d─▒r; Bununla birlikte, t├╝m uygulamalar ba┼čvuru taraf─▒ndan kullan─▒lmak ├╝zere en az 0 ila 9 aras─▒ bir destek sa─člamal─▒d─▒r. Bu say─▒lara "dosya tan─▒mlay─▒c─▒lar─▒" denir. 0, 1 ve 2 de─čerleri ├Âzel anlamlara ve geleneksel kullan─▒mlara sahiptir ve belirli y├Ânlendirme i┼člemleriyle ifade edilir; s─▒ras─▒yla standart giri┼č, standart ├ž─▒k─▒┼č ve standart hata olarak adland─▒r─▒l─▒rlar. Programlar genellikle girdilerini standart girdilerden al─▒rlar ve ├ž─▒kt─▒lar─▒ standart ├ž─▒kt─▒lara yazarlar. Hata mesajlar─▒ genellikle standart hataya yaz─▒l─▒r. Yeniden y├Ânlendirme operat├Ârleri, dosya tan─▒mlay─▒c─▒ numaras─▒n─▒ belirtmek i├žin bir veya daha fazla rakamdan (araya girilen karakterlere izin verilmez) ├Ânce gelir.


18







2, konsol standart hatas─▒d─▒r.

1, konsol standart ├ž─▒k─▒┼č─▒d─▒r.

Bu standart Unix ve Windows da POSIXÔÇÖi izliyor.

├ľrne─čin ka├žarken

 perl test.pl 2>&1
 

standart hata standart ├ž─▒k─▒┼ča y├Ânlendirilir, b├Âylece her iki ├ž─▒k─▒┼č─▒ birlikte g├Ârebilirsiniz:

 perl test.pl > debug.log 2>&1
 

Y├╝r├╝tmeden sonra, debug.log dosyas─▒nda hatalar dahil t├╝m ├ž─▒kt─▒lar─▒ g├Ârebilirsiniz.

 perl test.pl 1>out.log 2>err.log
 

Daha sonra standart ├ž─▒kt─▒ out.log'a, standart hata ise err.log'a gider.

Bunlar─▒ anlamaya ├žal─▒┼čman─▒ ├Âneririm.


17







Sorunuzu cevaplamak i├žin: Herhangi bir hata ├ž─▒kt─▒s─▒n─▒ al─▒r (normalde stderr'e g├Ânderilir) ve standart ├ž─▒kt─▒ya (stdout) yazar.

Bu, ├Ârne─čin t├╝m ├ž─▒kt─▒lar i├žin sayfalamaya ihtiya├ž duydu─čunuzda 'daha' i├žin faydal─▒d─▒r. Kullan─▒m bilgilerinin stderr'e yazd─▒r─▒lmas─▒ gibi baz─▒ programlar.

Hat─▒rlamana yard─▒mc─▒ olmak i├žin

  • 1 = standart ├ž─▒kt─▒ (programlar─▒n normal ├ž─▒kt─▒ yazd─▒rd─▒─č─▒ yerlerde)
  • 2 = standart hata (programlar─▒n hatalar─▒ yazd─▒rd─▒─č─▒ yer)

"2> & 1" sadece stderr'e g├Ânderilen her ┼čeyi stdout'a y├Ânlendirir.

Ayr─▒ca , bu konunun tam olarak kapsand─▒─č─▒ yere y├Ânlendirme hatas─▒yla ilgili bu yaz─▒y─▒ okuman─▒z─▒ da tavsiye ederim .


16







Bir programc─▒n─▒n bak─▒┼č a├ž─▒s─▒ndan, bu tam olarak ┼ču anlama gelir:

 dup2(1, 2);
 

Man sayfas─▒na bak─▒n─▒z .

Bunun 2>&1 bir kopya oldu─čunu anlamak da nedenini a├ž─▒klar ...

 command >file 2>&1
 

... ayn─▒ de─čil ...

 command 2>&1 >file
 

Birincisi, her iki ak─▒┼č─▒ da g├Ânderir file , ikincisi de hatalar stdout ve s─▒radan ├ž─▒kt─▒lar g├Ânderir file .


11


2015-12-03





─░nsanlar, her zaman hat─▒rlamak paxdiablo hakk─▒nda '─▒n ipucu ┼čimdiki O ... y├Ânlendirme hedefin konumu olan ├Ânemli.

2>&1 Operat├Âr i├žin ki┼čisel an─▒msat─▒c─▒m ┼čudur:

  • D├╝┼č├╝n├╝n & anlam olarak 'and' veya 'add' (karakteri olan Amper - ve bu, de─čil mi?)
  • B├Âylece olur: ' 2 (stderr)' i 1 / stdout'un zaten / ┼ču anda oldu─ču yere y├Ânlendir ve her iki ak─▒┼č─▒ da ekle ' .

Ayn─▒ hat─▒rlat─▒c─▒ di─čer s─▒k ÔÇőÔÇőkullan─▒lan y├Ânlendirmeler i├žin de ge├žerlidir 1>&2 :

  • Bir & anlam d├╝┼č├╝n and ya da add ... (ve i┼čareti hakk─▒nda fikrin var, evet?)
  • B├Âylece ┼č├Âyle olur: ' (stderout) zaten / ┼ču anda / stderr 1 oldu─ču yere y├Ânlendirir 2 ve her iki ak─▒┼č─▒ da ekler ' .

Ve her zaman hat─▒rlay─▒n: E─čer (sa─čdan sola do─čru, 'ucundan' y├Ânlendirmeler zincirlerini okumak zorunda de─čil soldan sa─ča).


6







Tabii ki /foo sisteminizde /tmp yok ve ÔÇŽ

 $ ls -l /tmp /foo
 

i├žeri─čini /tmp yazd─▒racak ve bir hata mesaj─▒ yazacakt─▒r. /foo

 $ ls -l /tmp /foo > /dev/null
 

i├žeri─čini g├Ânderecek ve /tmp i├žin /dev/null bir hata mesaj─▒ yazacakt─▒r. /foo

 $ ls -l /tmp /foo 1> /dev/null
 

ayn─▒s─▒n─▒ yapacak ( 1ÔÇÖe dikkat edin )

 $ ls -l /tmp /foo 2> /dev/null
 

i├žeri─čini yazd─▒racak /tmp ve hata mesaj─▒n─▒ /dev/null

 $ ls -l /tmp /foo 1> /dev/null 2> /dev/null
 

hem listeyi hem de hata mesaj─▒n─▒ g├Ânderir /dev/null

 $ ls -l /tmp /foo > /dev/null 2> &1
 

steno


6







Bu sadece hatay─▒ stdout'a veya terminale ge├žirmek gibidir.

Yani, cmd bir komut de─čil:

 $cmd 2>filename
cat filename

command not found
 

Hata ┼ču ┼čekilde dosyaya g├Ânderilir:

 2>&1
 

Standart hata terminale g├Ânderilir.


5







Y├Ânlendirme Giri┼či

Giri┼čin yeniden y├Ânlendirilmesi, ad─▒ dosya tan─▒t─▒c─▒s─▒ n'de okumak i├žin a├ž─▒lacak olan kelimenin geni┼člemesinden kaynaklanan dosyaya veya n belirtilmezse standart giri┼če (dosya tan─▒t─▒c─▒s─▒ 0) neden olur.

Giri┼či yeniden y├Ânlendirmenin genel format─▒ ┼čudur:

 [n]<word
 

Y├Ânlendirme ├ç─▒k─▒┼č─▒

├ç─▒kt─▒n─▒n yeniden y├Ânlendirilmesi, ad─▒ dosya tan─▒mlay─▒c─▒s─▒na n yazmak i├žin a├ž─▒lacak olan kelimenin geni┼člemesinden kaynaklanan dosyaya veya n belirtilmezse standart ├ž─▒kt─▒ya (dosya tan─▒mlay─▒c─▒ 1) neden olur. Dosya yoksa, olu┼čturulur; e─čer varsa, s─▒f─▒r boyuta kesilir.

├ç─▒k─▒┼č─▒ y├Ânlendirmek i├žin genel format:

 [n]>word
 

Dosya Tan─▒mlay─▒c─▒lar─▒n─▒ Ta┼č─▒ma

Y├Ânlendirme operat├Âr├╝,

 [n]<&digit-
 

dosya tan─▒mlay─▒c─▒ basama─č─▒n─▒ dosya tan─▒mlay─▒c─▒ n'ye veya n belirtilmezse standart giri┼če (dosya tan─▒mlay─▒c─▒ 0) g├Ât├╝r├╝r. rakam n'ye kopyaland─▒ktan sonra kapat─▒l─▒r.

Benzer ┼čekilde, y├Ânlendirme operat├Âr├╝

 [n]>&digit-
 

dosya tan─▒mlay─▒c─▒s─▒ basama─č─▒n─▒ dosya tan─▒mlay─▒c─▒s─▒ n'ye veya n belirtilmezse standart ├ž─▒kt─▒ya (dosya tan─▒mlay─▒c─▒s─▒ 1) ta┼č─▒r.

Ref:

 man bash
 

B├Âl├╝me /^REDIRECT gitmek i├žin yaz─▒n redirection ve daha fazlas─▒n─▒ ├Â─črenin ...

├çevrimi├ži bir s├╝r├╝m burada: 3.6 Y├Ânlendirmeler

Not:

├ço─ču zaman, man Linux ├Â─črenmek i├žin g├╝├žl├╝ bir ara├ž oldu.


5







Giri┼č i├žin 0, stdout i├žin 1 ve stderr i├žin 2.

Bir ─░pucu : somecmd >1.txt 2>&1 do─črudur, hi├žbir etkisi olmadan somecmd 2>&1 >1.txt tamamen yanl─▒┼čt─▒r !


1



─░lgili yay─▒nlar


ÔÇťKesme noktas─▒ ┼ču anda ├žarp─▒lmayacak. Kaynak kodu orijinal versiyondan farkl─▒. ÔÇŁBu ne anlama geliyor?

Programlama ba─člam─▒nda ÔÇťk├Âm├╝rbilimÔÇŁ ne demektir?

ÔÇťOptÔÇŁ ne demek (ÔÇťoptÔÇŁ dizininde oldu─ču gibi)? K─▒saltma m─▒? [kapal─▒]

Bu ne anlama geliyor: Serile┼čtirilebilir s─▒n─▒f statik bir final serialVersionUID alan─▒ bildirmiyor mu? [├žift]

PorterDuff.Mode android grafiklerde ne anlama geliyor?

Kabukta $$ ne anlama geliyor?

ActivityManager'da garip i┼člev: isUserAMonkey. Bu ne anlama geliyor, kullan─▒m─▒ nedir?

Dolar i┼čareti ve parantez i├žine bir komut koydu─čumuzda kabu─čun anlam─▒: $ (command)

Laymans a├ž─▒s─▒ndan, 'statik' Java'da ne anlama geliyor? [├žift]

'Const' anahtar s├Âzc├╝─č├╝ de─čeri de─či┼čtirilemez yapmaz. Bunun anlam─▒ ne?

Etiketle ilgili di─čer sorular [bash]


Uzak Git ┼čubesini nas─▒l kontrol edebilirim?

Bir JavaScript nesnesinde bir anahtar olup olmad─▒─č─▒n─▒ kontrol etme

JavaScript .protope nas─▒l ├žal─▒┼č─▒r?

Bash'deki s─▒n─▒rlay─▒c─▒daki dizgiyi nas─▒l b├Âlerim?

PowerShell, ÔÇťBu sistemde komut dizilerinin ├žal─▒┼čt─▒r─▒lmas─▒ devre d─▒┼č─▒ÔÇŁ diyor.

Alttaki ├Â─čelere div t─▒klay─▒n

Apache Camel tam olarak nedir?

Yazd─▒rma i┼člevinin ├ž─▒kt─▒s─▒ nas─▒l temizlenir?

Bir dizgeyi Ruby'de k├╝├ž├╝k veya b├╝y├╝k harfe d├Ân├╝┼čt├╝rme

PHP'de "Ba┼čl─▒klar zaten g├Ânderildi" hatas─▒ nas─▒l d├╝zeltilir