How to run a program in a shell
sarah.reichelt at gmail.com
Tue Sep 6 17:32:12 CDT 2005
> I have an app (runs on OSX) that is basically a website generator.
> Looks at some folders and puts some html wrappers around files there
> after a user enters some info. Two of the items entered are a
> username and password. The prog then generates all the html and
> should generate an .htaccess and .htpasswd files.
> What I need is to run htpasswd to generate the encrypted password
> for .htaccess
> The problem is that REV won't let me run or even launch a shell. It's
> supposed to work, but it just doesn't.
> If anybody knows how to run a shell prog and return it's result I
> would REALLY appreciate any help.
I have done this many times without problem, although I have never
tried it with the htpasswd command.
For a simple command, I use somethig like this:
put "cd /Users/sarah/Desktop/" & cr & "pwd" into tCmd -- put the
shell command into a variable
put shell(tCmd) into tResult -- do the shell command and get the result
put tResult into fld 1 -- display the result
As you can see, I was able to use a 2 line series of commands, by just
joining them together with a line break.
If the shell command requires sudo, then it gets a bit more
complicated, but here is how I do it (this example sets the system
put "#!/bin/sh" & cr into tScript
put "pw=" & quote & tPass & quote & cr after tScript
put "echo $pw | sudo -S date " & tDate & tTime & cr after tScript
-- build the command lines
put shell(tScript) into tCheck -- do the command & get the result
You have to quote your admin password, but you can ask for that when
running the script.
Finally, you sometimes need to run a shell command in the background.
In this case, I use the following syntax, which puts the result into a
text file. I then set up a regular check to see if the text file is
there and read the result when it's ready (this example pings an IP
address, waiting up to 15 seconds for the result, but not blocking
anything else from happening during that time):
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
repeat 15 times
wait 1 second 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
put word tWord-2 of tRes into tPercent
if tPercent = "0%" then return true
else return false
I hope these examples help, but if you want any further advice or
testing, let me know.
More information about the use-livecode