Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Aug 2003 19:01:00 +0930
From:      "Rob" <listone@deathbeforedecaf.net>
To:        "Dave [Hawk-Systems]" <dave@hawk-systems.com>, "FreeBSD Questions" <freebsd-questions@FreeBSD.ORG>
Subject:   Re: shell scripting while if string length != 0
Message-ID:  <00a001c3580f$a00dd280$a4b826cb@goo>
References:  <DBEIKNMKGOBGNDHAAKGNMEGJCPAC.dave@hawk-systems.com>

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.

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]" <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?00a001c3580f$a00dd280$a4b826cb>