Date: Fri, 1 Aug 2003 09:08:48 -0400 From: "Dave [Hawk-Systems]" <dave@hawk-systems.com> To: "FreeBSD Questions" <freebsd-questions@FreeBSD.ORG> Subject: RE: shell scripting while if string length != 0 Message-ID: <DBEIKNMKGOBGNDHAAKGNAEKFCPAC.dave@hawk-systems.com> In-Reply-To: <00a001c3580f$a00dd280$a4b826cb@goo>
next in thread | previous in thread | raw e-mail | index | archive | help
>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]" <dave@hawk-systems.com> >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 >> <file_o_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 >> <file_to_run_stuff> >> #!/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" >> > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?DBEIKNMKGOBGNDHAAKGNAEKFCPAC.dave>