=?iso-8859-1?q?=5BComm=5D_=D0=C5=D2=C5=CE=C1=D0=D2=C1=D7=CC=C5=CE=C9=C5_?= =?iso-8859-1?q?=D7=D9=D7=CF=C4=C1_=D7_=CC=CF=C7?=
ASA
=?iso-8859-1?q?llb_=CE=C1_udm=2Eru?=
Пт Окт 25 19:31:49 MSD 2002
Hello Sinom,
Friday, October 25, 2002, 8:09:08 PM, you wrote:
S> -----------------
S> ls > dirlist 2>&1
S> перенаправляет оба стандартный вывод и стандартный поток ошибок в файл
S> "dirlist", тогда как команда
S> ls 2>&1 > dirlist
S> направляет только втандартный вывод в файл "dirlist", потому что
S> стандартный поток ошибок был дублирован как стандартный вывод перед
S> стандартным выводом был перенаправлен в "dirlist".
S> -----------------
S> Перевести то я перевел, но понять не могу. :-( Пожалуйста, объясните ещё
S> раз, почему эти комманды приводят к различным результатам.
"комаанды", а не "комманды" (одно "м")
Сначала: bash, когда видит конструкцию N>&M, выполняет вызов
dup (т.е. копирование служебной информации об открытом файле).
А теперь посмотрим на это дело с точки зрения программы.
Как известно, имеются три стандартных файла: номер 0 -
стандартный ввод, номер 1 - стандартный вывод и номер 2 - вывод
ошибок.
сначала имеем
0 < stdin
1 > stdout
2 > stderr
ls >dirlist заставляет bash назначить файл номер 1 на вывод в
файл dirlist.
0 < stdin
1 > "dirlist"
2 > stderr
Затем 2>&1 приводит к копированию в файл номер 2
служебной информации об файле номер 1. То есть файл номер 2
теперь тоже направлен в файл dirlist
0 < stdin
1 > "dirlist"
2 > "dirlist" (скопировалось из 1)
а теперь если ls 2>&1 то сначала в файл номер 2 скопируется
информация о файле номер 1. То есть файл номер 2 будет
перенаправен в стандартный вывод.
0 < stdin
1 > stdout
2 > stdout (скопировалось из 1)
И после этого >dirlist назначит файл номер 1 на вывод в файл
dirlist, но не затронет файл номер 2, который останется
перенаправленным в стандартный выход.
0 < stdin
1 > "dirlist"
2 > stdout
--
Best regards,
ASA mailto:llb на udm.ru
Подробная информация о списке рассылки community