DEV Community

Ahmed Musallam
Ahmed Musallam

Posted on

How to add a "run script" context menu item in macOs

I usually write a shell script file for everything... so I don't have to remember long a$$ commands, especially for running servers or starting builds. It just makes everything easier.

I usually use "New Terminal Tab at Folder" service to, you guessed it, cd into that folder then run my shell script ./

New Terminal Tab at Folder

You might be thinking: "well, you can just double click it", yeah, I can, but I usually reserve double clicking for when I need to "edit" the shell script, not when I need to "run" it. Because I am frequently editing shell scripts.

So I thought, what if I add a context menu item "Run Script". So I can right-click a file then click "Run Script" and it will open a terminal and run my script for me.

run script

googled 'round, didn't quite find something like that, so I created it! Here is how:

  1. Open Automator
  2. Choose Service
  3. Drag the Run AppleScript action into the workflow
  4. add code below
  5. Save the workflow as run script
  6. Enjoy!
tell application "Finder"
    # Get the directory of the selected file, store it in "selDir"
    set selDir to POSIX path of (parent of first item of (get selection as alias list) as alias)
    # Get the path of the selected file, store it in "selPath"
    set selPath to POSIX path of (selection as text)
    # Optional commands to show dialog, for debugging puposes.
    # display dialog selDir as text
    # display dialog selPath as text
end tell

tell application "Terminal"
    # Open terminal, cd to selected file directory, then run te file.
    do script "cd " & selDir & " && " & selPath
end tell
Enter fullscreen mode Exit fullscreen mode

And now I realized that I've spent about an hour and a half learning some AppleScript when I should have been working on my side project... #MySideProjectsHaveSideProjects πŸ˜…

Top comments (2)

vivekkodira profile image
Vivek Kodira

Thank you :)

rowild profile image
Robert Wildling

How would I get the current folder instead of the parent folder?