为什么脚本打包为 .app 与 运行 直接打包为 .sh 时功能不同?

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

该脚本检查是否安装了 homebrew,并将结果输出到桌面上的文本文件。为了调试目的,我输出到桌面上的文本文件。

这是脚本:

#! /usr/bin/env bash

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

当我直接从终端 运行 这个脚本时,它什么都不输出。当我用 Appify 或 Platypus 打包脚本并打开包内容并从那里 运行 脚本(通过右键单击并点击打开)时,它什么都不输出。这是预料之中的,因为我已经安装了自制软件。每当我双击 .app 时,它都会输出“Installing Homebrew Now”。这是意外的,因为我的电脑上安装了自制软件。

为什么 运行 作为 .app 时输出不同?

应用脚本:

#!/bin/bash

if [ "" = "-h" -o "" = "--help" -o -z "" ]; 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 "[=12=]"` 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 "[=12=]"` 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 "" ".sh")}
DIR="$APPNAME.app/Contents/MacOS"

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

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

echo "$PWD/$APPNAME.app"

由于某些原因,打包为 .app 时 $PATH 不同。我必须使用绝对路径进行检查:

command -v /usr/local/bin/bash