From owner-freebsd-questions@FreeBSD.ORG Fri Aug 1 02:31:07 2003 Return-Path: Delivered-To: freebsd-questions@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DEBF737B401 for ; Fri, 1 Aug 2003 02:31:07 -0700 (PDT) Received: from zim.0x7e.net (zim.0x7e.net [203.38.184.132]) by mx1.FreeBSD.org (Postfix) with ESMTP id B7FE543FB1 for ; Fri, 1 Aug 2003 02:31:06 -0700 (PDT) (envelope-from listone@deathbeforedecaf.net) Received: from goo.0x7e.net ([203.38.184.164] helo=goo) by zim.0x7e.net with smtp (Exim 3.36 #1) id 19iWFa-000LKV-00; Fri, 01 Aug 2003 19:01:02 +0930 Message-ID: <00a001c3580f$a00dd280$a4b826cb@goo> From: "Rob" To: "Dave [Hawk-Systems]" , "FreeBSD Questions" References: Date: Fri, 1 Aug 2003 19:01:00 +0930 MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook Express 5.50.4927.1200 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4927.1200 Subject: Re: shell scripting while if string length != 0 X-BeenThere: freebsd-questions@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: User questions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 01 Aug 2003 09:31:08 -0000 I'm not a shell guru, but pipelines don't necessarily run in sequence. In line 5 of your script, the part that says sed '1d' > /path/to/file_o_commands will destroy all contents of the original file. This may or may not happen before cat /path/to/file_o_commands has finished reading it. If you just want to execute the lines of a file in order, use something like cat file_o_commands | while read CMD ; do eval $CMD done On the other hand, if you want the script to hang around at the end of the file and wait for new commands, you may need a named pipe (FIFO). This is a file that one process writes to and another one reads from, not necessarily at the same time. See http://www.linuxjournal.com/article.php?sid=2156 and http://tldp.org/LDP/lpg/node15.html for some info on these. ----- Original Message ----- From: "Dave [Hawk-Systems]" Subject: shell scripting while if string length != 0 > for reasons best left unsaid, we need to pull in a file full of partial > commands, and run them via a shell script on occasion, removing each command as > we run it. Have managed to hack togetherthe following shell script, but and > stumped on something simple because of my lack of shell knowledge; > > the file that holds out commands > > Server1 df -k > Server2 df -k > Server3 top | grep myprog > Server4 who > > add new commands to the end of the file with > echo "Server2 who" >> /path/to/file_o_commands > > then when we need to, run through the commands > > #!/bin/sh > # get top command > DOCOMMAND=`head -n 1 /path/to/file_o_commands` > # remove that command > cat /path/to/file_o_commands | sed '1d' > /path/to/file_o_commands > # run that command > ssh ${DOCOMMAND} > > this works as intended with 1 exception, we need to add a while in there to loop > through the file and stop processing an exit when `head -n 1 > /path/to/file_o_commands` does not return a line. > > I almost want to borrow -n from if > > while [ -n (DOCOMMAND=`head -n 1 /path/to/file_o_commands`) ] do > ...rest of script... > done > > Anyone care to enlighten me a bit? > > Dave > > > _______________________________________________ > freebsd-questions@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-questions > To unsubscribe, send any mail to "freebsd-questions-unsubscribe@freebsd.org" >