Co w powłoce oznacza "2 > &1"?
W powłoce Uniksa, jeśli chcę połączyć stderr
i stdout
W Strumień stdout
w celu dalszej manipulacji, mogę dołączyć następujące polecenie na końcu mojego polecenia:
2>&1
Więc jeśli chcę użyć head
na wyjściu z g++
, mogę zrobić coś takiego:
g++ lots_of_errors 2>&1 | head
Więc widzę tylko kilka pierwszych błędów.
Zawsze mam problem z zapamiętaniem tego, i ciągle muszę to sprawdzić, a to głównie dlatego, że nie do końca rozumiem składnię tego konkretnego trick.
Czy ktoś może to przerwać i wyjaśnić charakter po charakterze, co oznacza 2>&1
?
15 answers
Deskryptor pliku 1 jest standardowym wyjściem (stdout
).
Deskryptor pliku 2 jest standardowym błędem (stderr
).
Oto jeden ze sposobów na zapamiętanie tej konstrukcji (choć nie jest ona do końca dokładna): na początku 2>1
może wyglądać na dobry sposób na przekierowanie stderr
do stdout
. Jednak w rzeczywistości będzie to interpretowane jako " przekierowanie {[1] } do pliku o nazwie 1
". &
wskazuje, że poniżej znajduje się deskryptor pliku, a nie nazwa pliku. Tak więc konstrukcja staje się: 2>&1
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 20:18:47
echo test > afile.txt
Przekierowuje stdout na afile.txt
. To jest to samo co Robienie
echo test 1> afile.txt
Aby przekierować stderr, wykonujesz:
echo test 2> afile.txt
>&
jest składnią przekierowującą strumień do innego deskryptora pliku - 0 to stdin, 1 to stdout, a 2 to stderr.
Możesz przekierować stdout na stderr wykonując:
echo test 1>&2 # or echo test >&2
Lub odwrotnie:
echo test 2>&1
W skrócie... 2>
przekierowuje stderr do (nieokreślonego) pliku, dołączając &1
przekierowuje stderr do stdout.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 20:36:11
Kilka sztuczek o przekierowaniu
Niektóre cechy składniowe mogą mieć ważne zachowania. Jest kilka małych próbek o przekierowaniach, STDERR
, STDOUT
, i argumenty .
1-nadpisywanie czy dodawanie?
Symbol >
oznacza przekierowanie .
-
>
mean send to as a whole completed file , overwriting target if exist (see {[20] } Bash feature at #3 później). -
>>
mean send in addition to dołącza do target jeśli istnieje.
W każdym razie plik zostanie utworzony, jeśli nie istnieje.
2 - linia poleceń powłoki jest zależna od kolejności!!
Aby to przetestować, potrzebujemy prostej komendy, która wyśle coś na oba wyjścia :
$ 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
(spodziewając się, że nie masz katalogu o nazwie /tnt
, oczywiście ;). Mamy to!!
Więc, niech zobacz:
$ 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
Ostatnia linia poleceń zrzuca STDERR
do konsoli i wydaje się, że nie jest to oczekiwane zachowanie... Ale...
Jeśli chcesz zrobić jakieś filtrowanie postów o jednym wyjściu, drugim lub obu:
$ 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 --->
Zauważ, że ostatnia linia poleceń w tym akapicie jest dokładnie taka sama jak w poprzednim akapicie, gdzie napisałem wydaje się nie być oczekiwanym zachowaniem (więc może to być nawet oczekiwane zachowanie).
Cóż, jest trochę sztuczki o przekierowaniach, dla wykonywanie różnych operacji na obu wyjściach :
$ ( 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
deskryptor powstałby spontanicznie z powodu ) 9>&2
.
Dodatek: nota! Z nową wersją bash (>4.0
) istnieje nowa funkcja i bardziej seksowna składnia do robienia tego typu rzeczy: {]}
$ 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
I wreszcie dla takiego kaskadowego formatowania wyjściowego:
$ ((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
Dodatek: nota! ta sama Nowa składnia, w obu sposoby:
$ 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
Gdzie STDOUT
przechodzi przez określony filtr, STDERR
do innego i ostatecznie oba połączone wyjścia przechodzą przez trzeci filtr poleceń.
3-słowo o opcji noclobber
i składni >|
Czyli o nadpisaniu :
Podczas gdy set -o noclobber
poinstruuj Basha, aby nie nadpisywał żadnego istniejącego pliku, składnia >|
pozwala przejść przez to ograniczenie:
$ 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
Plik jest nadpisywany za każdym razem, dobrze teraz:
$ 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
Przejść przez >|
:
$ date >| $testfile ; cat $testfile
Mon Jan 7 13:18:58 CET 2013
$ date >| $testfile ; cat $testfile
Mon Jan 7 13:19:01 CET 2013
Wyłączanie tej opcji i / lub zapytanie, czy już ustawiona.
$ 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 - ostatnia sztuczka i nie tylko...
Dla przekierowania oba wyjścia Z podanego polecenia widzimy, że prawidłowa składnia może być:
$ ls -ld /tmp /tnt >/dev/null 2>&1
W tym przypadku specjalnym istnieje składnia skrótu: &>
... lub >&
$ ls -ld /tmp /tnt &>/dev/null
$ ls -ld /tmp /tnt >&/dev/null
Nota: jeśli 2>&1
exist, 1>&2
jest poprawną składnią też:
$ ls -ld /tmp /tnt 2>/dev/null 1>&2
4b - teraz pozwolę ci pomyśleć o:
$ 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 - jeśli jesteś zainteresowany więcej informacji
Możesz przeczytać piękną instrukcję, uderzając:
man -Len -Pless\ +/^REDIRECTION bash
In abash console; -)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-04 20:41:51
Liczby odnoszą się do deskryptorów plików (fd).
- Zero to
stdin
- jeden jest
stdout
- dwa to
stderr
2>&1
przekierowuje fd 2 na 1.
To działa dla dowolnej liczby deskryptorów plików, jeśli program ich używa.
Możesz spojrzeć na /usr/include/unistd.h
jeśli o nich zapomnisz:
/* Standard file descriptors. */
#define STDIN_FILENO 0 /* Standard input. */
#define STDOUT_FILENO 1 /* Standard output. */
#define STDERR_FILENO 2 /* Standard error output. */
To powiedziawszy napisałem narzędzia C, które używają niestandardowych deskryptorów plików do niestandardowego logowania, więc nie widzisz go, chyba że przekierujesz go do pliku lub coś.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-06 01:25:12
Znalazłem ten genialny post na przekierowaniu: Wszystko o przekierowaniach
Przekierowanie zarówno standardowego wyjścia, jak i standardowego błędu do pliku
$ polecenie & > Plik
Ten jednowierszowy używa operatora &>
do przekierowania obu strumieni wyjściowych - stdout i stderr - z polecenia do pliku. Jest to skrót Bash do szybkiego przekierowywania obu strumieni do tego samego miejsca docelowego.
Oto jak wygląda tabela deskryptorów plików po tym jak Bash przekierował oba strumienie:
Jak widzisz, zarówno stdout, jak i stderr wskazują teraz na file
. Więc wszystko napisane na stdout i stderr zostaje zapisane na file
.
Istnieje kilka sposobów przekierowania obu strumieni do tego samego miejsca docelowego. Możesz przekierować każdy strumień jeden po drugim:
$ polecenie >Plik 2 > &1
Jest to znacznie bardziej powszechny sposób przekierowania obu strumieni do pliku. Pierwszy stdout jest przekierowywany na plik, a następnie stderr jest duplikowany, aby był taki sam jak stdout. Więc oba strumienie kończą się wskazaniem na file
.
Gdy Bash widzi kilka przekierowań, przetwarza je od lewej do prawej. Przejdźmy przez kroki i zobaczmy, jak to się stanie. Przed uruchomieniem jakichkolwiek poleceń tabela deskryptorów plików Basha wygląda następująco:
Teraz Bash przetwarza pierwsze przekierowanie >plik. Widzieliśmy to wcześniej i to sprawia, że stdout punkt do plik:
Następny Bash widzi drugie przekierowanie 2>&1. Nie widzieliśmy wcześniej tego przekierowania. Ten duplikuje deskryptor pliku 2 jako kopię deskryptora pliku 1 i otrzymujemy:
Oba strumienie zostały przekierowane do pliku.
Jednak uważaj tutaj! Pisanie
Polecenie > Plik 2 > &1
To nie to samo co pisanie:
$ polecenie 2 > & 1 > plik
The kolejność przekierowań ma znaczenie w Bash! Polecenie to przekierowuje tylko standardowe wyjście do pliku. Stderr nadal będzie drukować na terminalu. Aby zrozumieć, dlaczego tak się dzieje, przejdźmy przez kolejne kroki. Przed uruchomieniem polecenia tabela deskryptora pliku wygląda następująco:
Teraz Bash przetwarza przekierowania od lewej do prawej. Najpierw widzi 2 > & 1, więc duplikuje stderr na stdout. Tabela deskryptorów plików staje się:
Teraz Bash widzi drugie przekierowanie, >file
i przekierowuje stdout do pliku:
Zauważ również, że w Bash, pisząc
$ polecenie & > plik
Jest dokładnie takie samo jak:
$ polecenie > & Plik
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 03:43:35
Ta konstrukcja wysyła standardowy strumień błędów (stderr
) do bieżącej lokalizacji standardowego wyjścia (stdout
) - ta kwestia walutowa wydaje się być zaniedbywana przez inne odpowiedzi.
Za pomocą tej metody można przekierować dowolny uchwyt wyjściowy na inny, ale najczęściej jest on używany do przesyłania strumieni stdout
i stderr
do jednego strumienia do przetwarzania.
Niektóre przykłady to:
# 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
Zauważ, że ten ostatni będzie, a nie kierować stderr
do outfile2
- przekierowuje go do tego, co stdout
było, gdy argument został napotkany (outfile1
) i następnie przekierowuje stdout
do outfile2
.
To pozwala na dość wyrafinowane sztuczki.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-26 08:39:06
2>&1
jest konstrukcją powłoki POSIX. Jest to jeden z elementów, który może być użyty w grze.]}
2
: "błąd standardowy " deskryptor pliku wyjściowego.
>&
: Duplikuj deskryptor pliku wyjściowego operator (wariant przekierowanie wyjścia operator >
). Po podaniu [x]>&[y]
, deskryptor pliku oznaczony przez x
jest kopią deskryptora pliku wyjściowego y
.
1
"standardowe wyjście " plik wyjściowy deskryptor.
Wyrażenie 2>&1
kopiuje deskryptor pliku 1
do lokalizacji 2
, więc każde wyjście zapisane do 2
("błąd standardowy") w środowisku wykonawczym trafia do tego samego pliku pierwotnie opisanego przez 1
("standardowe wyjście").
Dalsze wyjaśnienie:
Deskryptor pliku: "unikalna dla każdego procesu, nieujemna liczba całkowita używana do identyfikacji otwartego pliku w celu uzyskania dostępu do pliku."
Standardowe wyjście / błąd : zobacz następująca uwaga w sekcji przekierowanie w dokumentacji powłoki:
Otwarte pliki są reprezentowane przez liczby dziesiętne zaczynające się od zera. Największą możliwą wartością jest zdefiniowana implementacja; jednak wszystkie implementacje powinny wspierać co najmniej 0 do 9, włącznie, do wykorzystania przez aplikację. Liczby te nazywane są "deskryptorami plików". Wartości 0, 1 i 2 mają szczególne znaczenie i konwencjonalne zastosowania i są implikowane przez pewne operacje przekierowania; są określane odpowiednio jako standardowe wejście, standardowe wyjście i standardowy błąd. Programy zwykle pobierają dane ze standardowego wejścia i zapisują dane wyjściowe na standardowym wyjściu. Komunikaty o błędach są zwykle zapisywane na podstawie błędu standardowego. Operatory przekierowania mogą być poprzedzone jedną lub kilkoma cyframi (bez znaków interwencyjnych), aby wyznaczyć numer deskryptora pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-25 06:43:43
Aby odpowiedzieć na twoje pytanie: pobiera każde wyjście błędu (normalnie wysyłane na stderr) i zapisuje je na standardowe wyjście (stdout).
Jest to pomocne na przykład przy 'more', gdy potrzebujesz stronicowania dla wszystkich danych wyjściowych. Niektóre programy, takie jak drukowanie informacji o użytkowaniu na stderr.
To help you remember
- 1 = standardowe wyjście (gdzie programy wyświetlają normalne wyjście)
- 2 = błąd standardowy (gdzie programy wypisują błędy)
"2>&1" po prostu wskazuje wszystko wysłane do stderr, zamiast stdout.
Polecam również przeczytanie tego postu o błędnym przekierowaniu, gdzie ten temat jest szczegółowo omówiony.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-03 23:24:58
2 jest standardowym błędem konsoli.
1 jest standardowym wyjściem konsoli.
Jest to standardowy Unix, a Windows również postępuje zgodnie z POSIX.
Np. gdy biegniesz
perl test.pl 2>&1
Standardowy błąd jest przekierowywany na standardowe wyjście, więc możesz zobaczyć oba wyjścia razem:
perl test.pl > debug.log 2>&1
Po wykonaniu, możesz zobaczyć wszystkie dane wyjściowe, w tym błędy, w debugowaniu.log.
perl test.pl 1>out.log 2>err.log
Wtedy standardowe wyjście przechodzi na wyjście.log, i standardowy błąd do błędu.log.
I sugeruję, abyś spróbował je zrozumieć.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 03:14:53
Z punktu widzenia programisty oznacza to dokładnie to:
dup2(1, 2);
Zrozumienie, że 2>&1
jest kopią wyjaśnia również dlaczego ...
command >file 2>&1
... to nie to samo co ...
command 2>&1 >file
Pierwszy wysyła oba strumienie do file
, podczas gdy drugi wysyła błędy do stdout
, a zwykłe wyjście do file
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-03 10:20:34
Ludzie, pamiętajcie zawsze podpowiedź paxdiablo o bieżącej lokalizacji celu przekierowania... To jest Ważne.
Mój osobisty mnemonic dla 2>&1
operatora jest taki:
- pomyśl o
&
jako o znaczeniu'and'
lub'add'
(znak jest amperem-oraz, prawda?) - więc staje się: 'redirect
2
(stderr) to where1
(stdout) already/currently is and add both streams " .
Ten sam mnemonic działa również dla innych często używanych przekierowań, 1>&2
:
- pomyśl o
&
znaczeniuand
lubadd
... (masz pomysł o ampersand, tak?) - więc staje się: 'redirect
1
(stdout) to where2
(stderr) already/currently is and add both streams'.
I zawsze pamiętaj: musisz czytać łańcuchy przekierowań "od końca", od prawej do lewej (Nie od lewej do prawej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-01 10:47:27
Pod warunkiem, że /foo
nie istnieje w Twoim systemie i /tmp
Nie...
$ ls -l /tmp /foo
Wyświetli zawartość /tmp
i wyświetli komunikat o błędzie dla /foo
$ ls -l /tmp /foo > /dev/null
Wyśle zawartość /tmp
do /dev/null
i wyświetli komunikat o błędzie dla /foo
$ ls -l /tmp /foo 1> /dev/null
Zrobi dokładnie to samo (zwróć uwagę na 1)
$ ls -l /tmp /foo 2> /dev/null
Wydrukuje zawartość /tmp
i wyśle komunikat o błędzie do /dev/null
$ ls -l /tmp /foo 1> /dev/null 2> /dev/null
Wyśle zarówno listę, jak i Komunikat o błędzie do /dev/null
$ ls -l /tmp /foo > /dev/null 2> &1
Jest skrótem
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-01 20:58:04
To jest tak jak przekazywanie błędu do stdout lub terminala.
Czyli cmd
nie jest poleceniem:
$cmd 2>filename
cat filename
command not found
Błąd jest wysyłany do pliku w następujący sposób:
2>&1
Standardowy błąd jest wysyłany do terminala.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 03:17:17
Przekierowanie Wejścia
Przekierowanie wejścia powoduje, że plik, którego nazwa wynik rozszerzenia programu word, który ma być otwarty do odczytu w pliku deskryptor n, lub standardowe wejście (deskryptor pliku 0), jeśli n jest nie określono.
Ogólny format przekierowania danych wejściowych to:
[n]<word
Przekierowanie Wyjścia
Przekierowanie wyjścia powoduje, że plik, którego nazwa wynika z rozszerzenia programu word, który ma być otwarty do pisania na plik deskryptor n, lub standardowe wyjście (deskryptor pliku 1), jeśli n nie określono. Jeśli plik nie istnieje, jest tworzony; jeśli istnieje, jest obcięty do rozmiaru zerowego.
Ogólny format przekierowania wyjściowego to:
[n]>word
Przenoszenie Deskryptorów Plików
Operator przekierowania,
[n]<&digit-
Przenosi cyfrę deskryptora pliku na deskryptor pliku n, lub standardowe wejście (deskryptor pliku 0), jeśli nie podano N. cyfra jest zamknięta po zdublowaniu do n.
Podobnie operator przekierowania
[n]>&digit-
Przenosi cyfrę deskryptora pliku na deskryptor pliku n, lub standardowe wyjście (deskryptor pliku 1), jeśli nie podano n.
Ref:
man bash
Wpisz /^REDIRECT
, aby zlokalizować sekcję redirection
i dowiedzieć się więcej...
Wersja online jest tutaj: 3.6 przekierowania
PS:
Przez wiele czasu, man
było potężnym narzędziem do nauki Linux.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-05 03:25:15
0 dla wejścia, 1 dla stdout i 2 dla stderr.
Jedna Końcówka :
somecmd >1.txt 2>&1
jest poprawne, podczas gdy {[1] } jest całkowicie błędne bez efektu!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-25 09:46:19