From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.2.3 (2007-08-08) on sa.int.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.4 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.2.3 Date: Fri, 18 Jan 2008 11:44:38 +0200 From: Michael Shigorin To: sysadmins@lists.altlinux.org Message-ID: <20080118094438.GT7309@osdn.org.ua> Mail-Followup-To: sysadmins@lists.altlinux.org References: <20080117194344.GN7275@osdn.org.ua> Mime-Version: 1.0 Content-Type: text/plain; charset=koi8-r Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20080117194344.GN7275@osdn.org.ua> User-Agent: Mutt/1.4.2.1i Subject: Re: [Sysadmins] bash | read X-BeenThere: sysadmins@lists.altlinux.org X-Mailman-Version: 2.1.9 Precedence: list Reply-To: shigorin@gmail.com, ALT Linux sysadmin discuss List-Id: ALT Linux sysadmin discuss List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Jan 2008 09:44:40 -0000 Archived-At: List-Archive: On Thu, Jan 17, 2008 at 09:43:44PM +0200, Michael Shigorin wrote: > При этом что-нить вроде такого работает, как ожидается: > | while read first second junk; do > # something with $first (first IFS-delimited word) > # ...and with $second too... > # the rest of the line goes to $junk > done > > -- именно потому, что тут-то всё выполняется в одном сабшелле ;) При этом вынуть из него что-то, ессно, можно через stdout сотоварищи или файлики. hiddenman@ рассказал вот ещё что: re на твое сообщение в sysadmins@ про bash я когда etcnet патчил, столкнулся с этой и другими проблемами есть магический способ, почему-то мало где описан #!/bin/bash A='test' echo $A | while read B; do C=$B echo "C in the subshell1 is $C" done echo "C out of the subshell1 is $C" while read D; do E=$D echo "E in the subshell2 is $E" done < <(echo "$A") echo "E out of the subshell2 is $E" во втором варианте это не subshell. в результате мы снаруж имеем то, что изменили в этом while. да и работает он много быстрее, проверял такая вот magic :) можешь туда кинуть пока. я через nntp читаю, от рассылок отписался, но писать еще не пробовал через gmane.org :) упс, зачем я лишнего наделал....вот исправленный вариант: а, не , все правильно. внутри нужно присваивание сделать, переменные на время while read не экспортируются то бишь, вариант: #!/bin/bash A='test' echo $A | while read B; do echo "B in the subshell1 is $B" done echo "B out of the subshell1 is $B" while read C; do echo "C in the subshell2 is $C" done < <(echo "$A") echo "C out of the subshell2 is $C" работать не будет -- ---- WBR, Michael Shigorin ------ Linux.Kiev http://www.linux.kiev.ua/