From owner-freebsd-questions@FreeBSD.ORG Fri Aug 1 06:08:52 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 379DB37B404 for ; Fri, 1 Aug 2003 06:08:52 -0700 (PDT) Received: from web1.nexusinternetsolutions.net (web1.nexusinternetsolutions.net [206.47.131.12]) by mx1.FreeBSD.org (Postfix) with SMTP id 12D5743FB1 for ; Fri, 1 Aug 2003 06:08:51 -0700 (PDT) (envelope-from dave@hawk-systems.com) Received: (qmail 43056 invoked from network); 1 Aug 2003 13:08:50 -0000 Received: from unknown (HELO ws1) (65.49.236.97) by web1.nexusinternetsolutions.net with SMTP; 1 Aug 2003 13:08:50 -0000 From: "Dave [Hawk-Systems]" To: "FreeBSD Questions" Date: Fri, 1 Aug 2003 09:08:48 -0400 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.6604 (9.0.2911.0) In-reply-to: <00a001c3580f$a00dd280$a4b826cb@goo> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1165 Importance: Normal 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 13:08:52 -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. Good point. The few tests done so far appear to run as expected, certainly not under load of any sort though. >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 How to remove completed commands though? >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. Not really what I was thinking of, but may be a much more eloquent solution than an occasional cron run. Will definately check it out, thanks. Dave >----- 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" >> > > >