Shell commands are blocking -- work around?

Sivakatirswami katir at
Mon Nov 13 05:17:06 EST 2006

John: your idea of using a cron is excellent I would probably just have
Revolution write directly to cron (as I have this already set up...)
and pass the parameter along with it. Though i think I will use this for
other tasks, not this one. But that's definitely a keeper.

Sarah: I'll try using your method first, why don't
you use "send in 1 second until the file is not empty" or something like
that, instead of a repeat loop with wait?

BTW: from man sh, "REDIRECTION" Section
The mysterious part.. still archane, but there's a touch of light here.
and lots of other stuff in man sh, if you have the stomach for bash.

Note  that  the order of redirections is significant.  For example, the
               ls > dirlist 2>&1
        directs both standard output and standard error to  the  file
        while the command

   ls 2>&1 > dirlist

        directs  only the standard output to file dirlist, because the
        error was duplicated as standard output before the standard
output  was
        redirected to dirlist.


Sarah Reichelt wrote:
> On 11/11/06, Sivakatirswami <katir at> wrote:
>> Some on our team are *nix nerds and if I need a powerdrill to add
>> to my tool box they are, being long time masters of the unix
>> patchwork quilt method of micro programs and  pipes...  more than
>> happy to give me a little bash script. OK so, my cmd line skills
>> are slowly improving and I can install these widgets in
>> /usr/local/bin/  # on my OSX box, G4 Powerbook
>> e.g.
>> SEARCH_PATTERN=$1 locate index.shtml | while read INDEX_FILE; do 
>> fgrep -H -i "$SEARCH_PATTERN" $INDEX_FILE done | more exit 0
>> (wow, that is soooo concise!)
>> and  then in Revolution set up a button:
>> on mouseUp put empty into fld "results" set the shellCommand to
>> "/bin/sh" put "/usr/local/bin/" & quote & fld
>> "findString" & quote into tShellCmd put shell (tShellcmd) into fld
>> "results" end mouseUp
>> It all works, is very "sweet" And it is a  *lot* faster than using 
>> transcript for the same job. *but* Only problem is: it is
>> blocking... and this is documented behavior:
> Here is my way around this problem. The example below is for a "ping"
>  command, but I'm sure you can adapt it to your stuff.
> As you can see, I direct the output of the shell command to a 
> temporary text file. The second part of the shell command containing 
> the "2>&1 &" is the relevant section. I don't understand it but it 
> works :-) The rest of the script just loops around checking to see if
>  there is anything in this file and then parsing the result. Since it
>  uses wait with messages, it is non-blocking.
> HTH, Sarah
> function checkPing pIP put specialFolderPath("Desktop") & "/ping.txt"
> into tFileName if there is a file tFileName then delete file
> tFileName
> put "ping -c1 -n "  & pIP into tShellCmd put " > " & tFileName & "
> 2>&1 &" after tShellCmd get shell(tShellCmd)
> put 0 into timeCheck repeat 50 times add 1 to timeCheck wait 1 tick
> with messages if there is a file tFileName then put URL ("file:" &
> tFileName) into tRes if tRes is empty then next repeat  -- file
> created but no result yet
> put wordOffset("loss", tRes) into tWord if tWord = 0 then next repeat
> -- file created but result not complete
> -- if there is a file tFileName then delete file tFileName put word
> tWord-2 of tRes into tPercent if tPercent = "0%" then return true 
> else return false end if end repeat
> if there is a file tFileName then delete file tFileName return false 
> end checkPing _______________________________________________ 
> use-revolution mailing list use-revolution at Please
> visit this url to subscribe, unsubscribe and manage your subscription
> preferences:

More information about the Use-livecode mailing list