简体   繁体   中英

AppleScript “do shell script” ignores PATH Variable

I'm trying to build an automated build script with applescript on MacOS X.

For now everything works correctly with one glitch.

The command "do script ("zipalign -f -v 4 /tmp/src.apk /tmp/tgt.apk") works fine if I run it in a separate tell for application "Terminal" but leaves the terminal window open when it's done. Everything else in the script works fine in tells for application "Finder".

If I try to run the command via "do shell script" inside the tell for "Finder" I only get an error "command not found" .

The path to zipalign is set in /etc/paths and is reachable through any terminal window and "do shell" but not to "do shell script" command.

What is the correct way to ensure that "do shell script" uses $PATH to find commands or alternatively is there a bulletproof way to close the terminal left by "do script" ?

When you invoke bash as an interactive login shell, the paths in /etc/paths and /etc/paths.d/* are added to PATH by /usr/libexec/path_helper , which is run from /etc/profile . do shell script invokes bash as sh and as a non-interactive non-login shell, which does not read /etc/profile .

You can run path_helper manually though:

do shell script "eval `/usr/libexec/path_helper -s`; echo $PATH"

Though this question was four years ago, but I think the simplest answer is needed to be told. I use the command 'wkhtmltopdf' (which is used to print pdf and it is placed in /usr/local/bin ) for example

--past
wkhtmltopdf out.html out.pdf
--now
PATH=$PATH:/usr/local/bin; wkhtmltopdf out.html out.pdf

It just add new PATH variable to the sh process called up by AppleScript.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM