On 2009-06-07, at 10:01:32, Pierce Freeman wrote: Just one more question though, how would I go about making multiple line codes in the launchd file?
Actually, due to the way things work in some other situations, I didn't know it was possible to use multiple lines in an 'sh' launchd script. Turns out it's very easy:
<key>Program</key> <string>/bin/sh</string> <key>ProgramArguments</key> <array> <string>sh</string> <string>-c</string> <string> cd /Users/me/Desktop; mkdir -p tom/dicked/harriet; </string> </array> <key>RunAtLoad</key> <true/> And how do you deal with quotes?
This was explained and illustrated previously.
On 6/7/09 2:29 AM, "Philip Aker" < email@hidden> wrote: On 2009-06-06, at 15:57:47, Pierce Freeman wrote:
Just one question, though, which is how I can use cp in that same
way to copy a file from one directory into the other. Your echo
example works fine, but I just can’t figure out how to move it.
Based on the fact that you can't figure that out but already gave the
correct form in your "ProgramArguments", I suggest that a power hour
with a unix shell scripting tutorial will pay bigger dividends than a
direct answer. As to which tutorial is the best, I can't say because
it's a matter of finding an author you can relate to rather than any
other criteria. That is, if the first one you read doesn't appeal
after a few pages, move on to another choice. A search such as:
<http://www.google.com/search?q=unix+shell+script+tutorial
gives wide range of possibilities and the man page for cp on Mac OS
X is at <x-man-page://cp>.
My salient part of my code is below:
<dict>
<key>Program</key>
<string>bin/cp</string>
// What do I put for the AppleScript?
<key>ProgramArguments</key>
<array>
<string>cp</string>
<string>-Rf</string>
<string>Location</string>
<string>Location</string>
</array>
// What do I put for the AppleScript?
</dict>
</plist>
I added comments for where I think the AppleScript should go,
though I may be very wrong about it. ;)
Close but no cigar.
- Firstly the form of the value for 'Program' should probably be a
full path.
- Secondly, you have to use controller shell, like sh, bash, or
tclsh, etc., to be able to call multiple tools. For such shells,
usually the option specifying an inline script implies that the
subsequent arguments are directed to that script. Hence a one line
script is used in the case no arguments are needed.
Here something that works for me as a startup script (I'm using
10.5.7).
It's a LaunchAgent plist named 'ca.aker.startup.plist' (to
coordinate with the 'Label' value) and placed in ~/Library/
LaunchAgents.
I use the 'WorkingDirectory' key to have launchd cd to wherever and
then run my script.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd
">
<plist version="1.0">
<dict>
<key>Label</key>
<string>ca.aker.startup</string>
<key>Program</key>
<string>/bin/sh</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>echo `date +'%F %T'` > date.txt;/usr/bin/
osascript -e 'tell application "TextEdit" to
activate'</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>/Users/me/Desktop</string>
</dict>
</plist>
Thanks for your reply. However, I am including the actual code
in the
Launchd file (I know, I know) so how would this translate into
that
scenario? I get what you are saying, however I am just not seeing
how that
could be translated into Launchd.
Maybe you'd better show the salient part of the LaunchAgent plist.
Inline scripts work kinda like NSTask.
One non-obvious part about shell scripts in that format is that
they
have to be XML escaped.
Otherwise, it's just the same as the single line example but you
would
use the -e option for osascript.
I am making a Launchd job, and want to run an AppleScript once
it is
done
with it's main task. I want my cd job to run, and then a
follow-up
AppleScript to run afterwards. My problem is that I don't
know how
to use
two different "main codes" (ex. cd) to be run in one launchd.
I'm guessing you would want something like the following in your
shell
script:
cd /path/to/dir;
osascript /path/to/some.scpt;
To run multiple shell script calls from a single line it would
be:
cd /path/to/dir;osascript /path/to/some.scpt;
The basic command separator is a semicolon.
Philip Aker echo email@hidden@nl | tr a-z@. p-za-o.@ Democracy: Two wolves and a sheep voting on lunch.
|