开发者

How to run a shell script in OS X by double-clicking?

开发者 https://www.devze.com 2023-02-13 08:28 出处:网络
I开发者_开发问答 have a shell script that has user execution permission on OS X, but when I double click on it, it opens in a text editor. How can I get it to run by double-clicking it?

I开发者_开发问答 have a shell script that has user execution permission on OS X, but when I double click on it, it opens in a text editor. How can I get it to run by double-clicking it?


  • First in terminal make the script executable by typing the following command:

      chmod a+x yourscriptname
    
  • Then, in Finder, right-click your file and select "Open with" and then "Other...".

  • Here you select the application you want the file to execute into, in this case it would be Terminal. To be able to select terminal you need to switch from "Recommended Applications" to "All Applications". (The Terminal.app application can be found in the Utilities folder)

  • NOTE that unless you don't want to associate all files with this extension to be run in terminal you should not have "Always Open With" checked.

  • After clicking OK you should be able to execute you script by simply double-clicking it.


Have you tried using the .command filename extension?


As of OSX 10.10 (Yosemite) and since at least OS X 10.8 (Mountain Lion), the behavior is as follows when you open (double-click) executable scripts from Finder:

  • Executable scripts[1] with either NO suffix or suffix .command:
  • are executed by default - no setup required:
    • a new Terminal window opens in which the script runs.
    • by default, the window will remain open after the script terminates so you can inspect the output (though at that point the shell that ran the script has exited and you cannot interact with it any longer).
      However, via Terminal's Preferences... > Profiles you can opt to automatically close the window when the script exits.
  • Caveat: the working folder is invariably the current user's home folder, NOT the folder in which the script is located.
    • To make a shell script change to the folder in which it is located, place
      • cd -- "$(dirname "$BASH_SOURCE")" right after the shebang line
      • or, if you must remain POSIX-compliant, cd -- "$(dirname "$0")".
      • For edge cases, such as finding a symlinked script's true source directory, see this answer.
  • If the script is unexpectedly not executable:
    • Make it executable by running chmod +x <script> in Terminal; otherwise, you'll see the following symptoms:
    • .command: Finder displays a misleading error message that suggests the problem can be fixed via File > Get Info, which is not true - use the chmod +x method suggested above.
    • no suffix:
      • with a shebang line (e.g., #!/bin/bash): behavior is as if the suffix were .sh - see below.
      • with no shebang line: opens in your default text editor (which is TextEdit by default).
  • Scripts with suffix .sh, whether executable or not:
  • are opened for editing in TextEdit.app or, if installed, with Xcode.app.
  • Scripts with suffix .scpt or .applescript (even if they're themselves marked as executable, which is not normally the case):
    • opened for editing in [Apple]Script Editor
    • Note that the JXA source-code files seem to have no distinct suffix (yet).
  • Scripts with a custom suffix (a suffix not yet known to the system), whether executable or not (in fact, applies to any kind of file):
    • prompt you for the app to open them with when you first open them, and remember that choice.

[1] Executable means: a script with the executable permission bit(s) set and the calling user - relative to the ownership to the file - therefore potentially being allowed to execute it.
If you use chmod a+x to set all permission bits (which is typical), anyone can invoke it (assuming they're also allowed to read the file based on the read permission bit(s) and the file's ownership).


Alternatively, you could create a regular Mac OS X application from your script using Platypus


The easy way is to change the extension to .command or no extension.

But that will open the Terminal, and you will have to close it. If you don't want to see any output, you can use Automator to create a Mac Application that you can double click, add to the dock, etc.

  1. Open Automator application
  2. Choose "Application" type
  3. Type "run" in the Actions search box
  4. Double click "Run Shell Script"
  5. Click the Run button in upper right corner to test it.
  6. File > Save to create the Application.

How to run a shell script in OS X by double-clicking?


No need to use third-party apps such as Platypus.

Just create an Apple Script with Script Editor and use the command do shell script "shell commands" for direct command calls or executable shell script files, keep the editable script file safe somewhere then export it to create an Application script. the app script is launch-able by double click or selection in bar folder.


You can also set defaults by file extension using RCDefaultApp:

http://www.rubicode.com/Software/RCDefaultApp/

potentially you could set .sh to open in iTerm/Terminal etc. it would need user execute permissions, eg

chmod u+x filename.sh

How to run a shell script in OS X by double-clicking?


chmod 774 filename

Note: The file with name 'filename' that has the bash script has no extension

0

精彩评论

暂无评论...
验证码 换一张
取 消