Using Automator.app and Platypus.app, I have been able to bundle a simple shell script I created to power cycle wi-fi on my MacBook Pro. Both resulting apps run properly, but have one glaring issue that I want to correct: The apps reference the shell script from outside of the program. How can I embed the shell script and reference it from the app's resources so that the app can run even if the original source file is moved?
Converting a Shell Script Into a *.app File
26.2k Views Asked by C1pher At
2
There are 2 best solutions below
2
Mitra Ardron
On
While this works, there seems to be no way to access the Contents directory from the script. Its not passed in the environment variables to bash, or anywhere else I can find. This makes it hard to bundle stuff into the Contents directory since it seems to be inaccessible by the bash script. There are various hacks on the net, but they all involve effectively searching for the script by name, which means if there are two versions of the app in two places then it will fail. Anyone solve that?
Related Questions in MACOS
- Error installing Nativescript on Mac M2 Sonoma 14.4.1
- macOS - Most secure way of a GUI SUDO_ASKPASS
- When using onDrag in SwiftUI on Mac how can I detect when the dragged object has been released anywhere?
- Why does Hugo generate different taxonomy-related HTML on different OS's?
- ZSH function parameters conundrum
- how to make read only file/directory in Mac writable
- macOS BigSur - Unable to run bundled php version or brew php 8
- 9 Digit Addresses in Hexadecimal System in MacOS
- MacOS Bash-Script: while read p and echo
- How to make a range for tail rows on a categorized table in Numbers with JXA scripts?
- Cannot build a basic project with curl on Mac (M2) for Raspberry Pi Pico
- How to recover deleted files from create vite react project
- Can't run built SFML project from Xcode template
- React Native - RealmJS - Linker command failed with exit code 1
- How can I manually add a keyboard shortcut to a Shortcut Action Service directly via the system files, without going through the System Prefs GUI?
Related Questions in SHELL
- macOS - Most secure way of a GUI SUDO_ASKPASS
- When does Bash read heredocs?
- Why `set -o pipefail` gives different output even though the pipe is not failing
- Run multiple shell scripts in Dockerfile
- Alias does not take effect when I use Vim to execute external commands
- why variable substitution is so different?
- Error: fish: ${ is not a valid variable in fish
- Custom Bash functions & custom statements - Need some advice
- unexpected operator == in square brackets when trying to use gum lib
- Delete first three lines containing a certain word
- Keep the log for the last 14 days
- Iterate over items in one array and groups of items in second array
- Keep multi-version of a static-lib like what we do for shared-libs
- How to write function in bash for reuse shell commands inside using osascript?
- Why is it that when I pass certain directory names to `ls`, sometimes it does not list their contents?
Related Questions in SCRIPTING
- How do I react to external program launch inside an Automator workflow?
- can anyone help me for NSIS Script I have a case where I need to check cases can be 3.3 3.42 23.5 23.56w 3.467 999.999 999.99a but not 1.b or 8..a
- How do I restart a batch file in PowerShell?
- Trouble updating a Field in Salesforce via a Python Script
- What are JCL Alternitives for Embeded Applications?
- grep expression behaving weird (unix/mac) while reading a conf file
- Why is my bash script showing [2: command not found?
- How can I modify my code to negate this error?
- Find Specified Software - Powershell
- how to change Value to something specific and not add to it?
- How can I run this Powershell function from a batch file on windows?
- How to make toggle key to switch between two seperate functions lua script(logitech)
- My quiz automatically submits when i plug in a chrome extension that involves doing an api call
- How to "make" a variable that contains another variable value?
- function not recognizable inside scriptblock in PowerShell script
Related Questions in EXECUTABLE
- Issue with making python executable with local db, sqlite3, tkinter
- Cmake is not building an executable
- How can i debug a python exe which is created by using pyinstaller?
- With Node SEA, how to pack node_modules into executable?
- Executable generated from Pyinstaller not closing properly
- Having problems with cx_Freeze and making an executable
- Why can't I read my executable's output in Python?
- Corect Maven project execution plugin configuration when using multimodule application
- How to convert editable python file to executable?
- Streamlit with Pyinstaller issue
- Trouble building UACME executable
- Why can't I run my python executables in busybox?
- How do I produce multiple executables using Nuitka for Python?
- Letting user modify the program through a "config" folder
- PyInstaller + Tkinter within Virtual Environment -- failed to built an executable in python 3.8
Related Questions in DESKTOP
- getting error when trying to launch kotlin jar file that use supabase "java.lang.NoClassDefFoundError"
- Record all desktop internet requests and select certain requests and send it to the server
- Matlab *.m MIME type not working on linux POP OS
- Send list of opened tabs from chrome extension to electron application
- Why won't Docker Desktop in Windows launch properly?
- how to create native distributions (installers/packages) for all the supported systems with compose?
- Docker CLI exit status 1
- How to develop a desktop application that can be launched from a right-click on the finder
- How can I create a .desktop file [Desktop Entry] that executes a command in the current directory?
- How to configure XRDP to work with Gnome on Ubuntu 22.04?
- tableau color code one measure ruins subtotal on the crosstab
- Failed to connect a sqlite file in tauri + vue project?
- how to use sqlite in vue.js + tauri.js desktop app?
- Change Icons and a title of the installed application on Windows
- How to limit cpu and memory usage of the whole desktop?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Just to mention it, if you Get Info on a script, you can set it to be opened with the Terminal. This will run the script when you double-click it.
Otherwise, packaging a script in a .app bundle is trivial. Mac OS X will happily run any script identified as the application's executable.
At a minimum, you need to following structure in place:
Where the file called (name) is your script (which must be executable, and must have a shebang line). (name) must be identical in the .app directory and the script file: for instance, if your app directory is called "My Shell Script.app", then the file inside the MacOS directory must be called "My Shell Script", with no extension.
If this is inconvenient, it's possible to use an Info.plist file to specify an alternate executable name. The Info.plist goes in the Contents directory:
This structure (a MyScript executable in a wrapper called Wrapper.app) works if you specify MyScript as the
CFBundleExecutablein the property list:Using an Info.plist file is probably preferable, as that will allow you to rename your wrapper without breaking it.
Here's one example script that uses
/bin/shas the interpreter, but you really could have anything (#!/usr/bin/swift,#!/usr/bin/python, etc).The script will run as you double-click the app bundle.
You can bundle anything else that you need with your script within the
Contentsdirectory. If you feel fancy, you can reproduce the standard executable bundle layout with aResourcesdirectory and things like that.