bashmacoshomebrewportability.app

Why would a script function differently when packaged as a .app versus run directly as a .sh?


The script checks if homebrew is installed and outputs the result to a text file on the Desktop. I outputted to a text file on the Desktop for debugging purposes.

Here is the script:

#! /usr/bin/env bash

cd ~/Desktop
(command -v brew >/dev/null 2>&1 ||  echo >&2 "Installing Homebrew Now") &> result.txt

When I run this script directly from terminal, it outputs nothing. When I package the script with Appify or Platypus and open package contents and run the script from there (by right clicking and hitting open), it outputs nothing. This is expected since I already have homebrew installed. Whenever I double click the .app, it outputs "Installing Homebrew Now". This is unexpected since I have homebrew installed on my computer.

Why is the output different when run as a .app?

Appify Script:

#!/bin/bash

if [ "$1" = "-h" -o "$1" = "--help" -o -z "$1" ]; then cat <<EOF
appify v3.0.1 for Mac OS X - http://mths.be/appify
Creates the simplest possible Mac app from a shell script.
Appify takes a shell script as its first argument:
    `basename "$0"` my-script.sh
Note that you cannot rename appified apps. If you want to give your app
a custom name, use the second argument:
    `basename "$0"` my-script.sh "My App"
Copyright (c) Thomas Aylott <http://subtlegradient.com/>
Modified by Mathias Bynens <http://mathiasbynens.be/>
EOF
exit; fi

APPNAME=${2:-$(basename "$1" ".sh")}
DIR="$APPNAME.app/Contents/MacOS"

if [ -a "$APPNAME.app" ]; then
    echo "$PWD/$APPNAME.app already exists :("
    exit 1
fi

mkdir -p "$DIR"
cp "$1" "$DIR/$APPNAME"
chmod +x "$DIR/$APPNAME"

echo "$PWD/$APPNAME.app"

Solution

  • For some reason the $PATH is different when packaged as a .app. I had to check using absolute path:

    command -v /usr/local/bin/bash