OS X Run Shell Scripts From Finder

If you want a shell script to be executable from Finder then you only need to follow two steps. No additional helper apps are needed; some exist but don't bother.

  1. Rename the shell script extension from .sh to .command
  2. Make the file executable - Either via the Terminal: chmod +x file.command or by Get Info in Finder

When the file.command is double-clicked/command-o in Finder, the Terminal will pop up and you'll see the script executed as well as the output.

Note 1: It does not work to symlink a current .sh script and make the symlink end in .command

Here's an example script I use to mount my code repository since I'm having trouble with AutoFS caching and failing to reconnect.

Example File: code_repos.command

#!/bin/sh
sshfs adam@svn:/path/to/code_repos/ /Users/adam/ssh_mounts/code_repos -oreconnect,volname=code_repos

Example Terminal.app Output

Last login: Thu Feb 21 01:27:22 on ttys003
You have mail.
/Users/adam/Desktop/Scripts/sshfs/code_repos.command ; exit;
mosfet:~ adam$ /Users/adam/Desktop/Scripts/sshfs/code_repos.command ; exit;
logout

[Process completed]

Note 2:
Wherever you put the file, it will run with your home directory (ie: /Users/adam) as the current working directory.

To get around this, use the following line after the #!/bin/sh in your shell script. This will move the current working directory to the directory that contains your command file.

cd "`dirname "$0"`"

Comments

Exactly what I was looking for...Thanks! barrettmo

Exactly what I was looking for...Thanks! barrettmo <a href="http://www.oyunyolu.net/" title="oyunlar">Oyunlar</a>

If you want to use the script on the command line as well as through Finder a nicer way to change the working directory is replacing cd with pushd and adding a popd command at the end of the script. I know this works for at least bash (not sure about others) and it leaves the user's directory intact when running from the command line.

Thank you for your post. I was trying to get my window to close after the script has run. My script is run on startup and doesn't require any user interaction. I read several other posts that mention AppleScript or a preference in the Terminal app, but I have not had any luck yet.

Cheap herve leger sale online, provides hundreds of fashion h <a target="_blank" href="http://www.herve-leger-sale.org/bandage-c-5.html/">herve leger bandage</a> which is a professional Herve Leger Shop. These <a target="_blank" href="http://www.herve-leger-sale.org/">herve lege</a> are so wonderful. Many women are attracted by the noble of herve leger dresses.

well,the following i will do a introduce about the popular jerseys:
<a href="http://www.buynflnfl.com">New Orleans Saints jerseys</a>
<a href="http://www.buynflnfl.com">Los Angeles Lakers jerseys</a>
<a href="http://www.buynflnfl.com">New York Yankees jerseys</a>
<a href="http://www.buynflnfl.com">Chicago Blackhawks jerseys</a>
<a href="http://www.buynflnfl.com">NFL Jerseys</a>
<a href="http://www.buynflnfl.com">NHL Jerseys</a>
<a href="http://www.buynflnfl.com">MLB Jerseys</a>
<a href="http://www.buynflnfl.com">NBA Jerseys</a>

Thank you! Well explained. :)

Damn - I've been wanting to make my scripts executable for others not so adept at running stuff on the command line for ages! Thanks for this!