Shell command doesn't give feedback until done

Bill Vlahos bvlahos at mac.com
Mon Jun 20 12:34:33 EDT 2005


The ampersand doesn't seem to work to run asynchronously.

Bill

On Jun 2, 2005, at 8:10 PM, Brian Yennie wrote:

> OK, since I started us down a dead-end path, here's some goodies  
> that DO work.
> Create a new stack. Put the handlers below in the stack script.
> Now create one large scrolling field.
>
> Now run this in your message box, a lengthy shell task (finding all  
> html files in your Applications directory):
>
> ## RUN find /Applications/ -name '*.html as an asynchronous task  
> and stream the data back
> put async_shell("find /Applications/ -name '*.html'") into tProcessID
> repeat while async_process_alive(tProcessID)
>    put async_shell_get_data(tProcessID) into fld 1
>    wait 1 second with messages
> end repeat
> put async_shell_get_data(tProcessID) into fld 1
>
> It could use a little polishing, but it works! Asynchronous shell  
> tasks on MacOS X...!
>
> #######
>
> global _async_shell_counter, _async_shell_map
>
> function async_shell tCmd
>   if (_async_shell_counter is empty) then put 1 into  
> _async_shell_counter
>   else add 1 to _async_shell_counter
>
>   put specialFolderPath("temporary") into tFilePath
>   if (last char of tFilePath <> "/") then put "/" after tFilePath
>   put ("revTmp"&_async_shell_counter&".out") after tFilePath
>
>   put tCmd&" &> "&tFilePath&" & echo $!" into tCmd
>
>   put shell(tCmd) into tProcessID
>   put tFilePath into _async_shell_map[tProcessID]
>
>   return tProcessID
> end async_shell
>
> function async_process_alive tProcessID
>   put shell(("ps -p"&&tProcessID)) into tProcessList
>   return (offset(tProcessID, tProcessList) > 0)
> end async_process_alive
>
> function async_shell_get_data tProcessID
>   return url ("file:"&_async_shell_map[tProcessID])
> end async_shell_get_data
>
>
>> Ugh. I just tried this and it doesn't work in Rev- although it's  
>> the standard way to deal with this sort of task in a terminal.
>> I'm guessing that Rev refuses to return until the process is  
>> completely terminated- and opens a whole new shell environment  
>> every time you call shell(). How rude!
>>
>> Now picking for a workaround... sorry for the false alarm.
>>
>>
>>> On 6/2/05 4:23 PM, Brian Yennie wrote:
>>>
>>>
>>>> Agh, sorry- I obviously missed the point of the thread.
>>>> Add an ampersand after your command:
>>>> get shell("mycommand > mylogfile.log &")
>>>> Voila, a "backgrounded" process that returns immediately.
>>>>
>>>
>>> Oh cool. I will go try it. I have a use for this. :)
>>>
>>> -- 
>>> Jacqueline Landman Gay         |     jacque at hyperactivesw.com
>>> HyperActive Software           |     http://www.hyperactivesw.com
>>> _______________________________________________
>>> use-revolution mailing list
>>> use-revolution at lists.runrev.com
>>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>>
>>>
>>>
>>
>> _______________________________________________
>> use-revolution mailing list
>> use-revolution at lists.runrev.com
>> http://lists.runrev.com/mailman/listinfo/use-revolution
>>
>>
>>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>



More information about the use-livecode mailing list