From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Fri, 25 Oct 2002 20:31:49 +0500 From: ASA X-Mailer: The Bat! (v1.60q) Organization: LLB, LLC X-Priority: 3 (Normal) Message-ID: <13212772395.20021025203149@udm.ru> To: Sinom Subject: Re[2]: [Comm] перенаправление вывода в лог In-Reply-To: <20021025230908.5aaf5f12.sinom@ktk.ru> References: <20021025130958.9BADC2EE5D@mail.off-club.com> <20021025230908.5aaf5f12.sinom@ktk.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit Sender: community-admin@altlinux.ru Errors-To: community-admin@altlinux.ru X-BeenThere: community@altlinux.ru X-Mailman-Version: 2.0.9 Precedence: bulk Reply-To: community@altlinux.ru X-Reply-To: ASA List-Unsubscribe: , List-Id: List-Post: List-Help: List-Subscribe: , List-Archive: Archived-At: List-Archive: List-Post: 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