我正在运行 OSX,并且正在制作一个应用程序,该应用Resources
程序的文件夹中有一个 Python 程序,Bash 脚本在应用程序启动时调用 Python 脚本来运行。该脚本位于MacOS
应用程序内的文件夹中,与应用程序同名。我有这个 Bash 脚本:
#!/bin/bash
clear
python /Applications/Converter.app/Contents/Resources/Converter.py
我以为 Bash 脚本会在应用程序启动时执行,从而导致 Python 脚本通过终端窗口运行。但是当我双击应用程序时,什么也没有发生!
所以基本上,我希望 bash 脚本在终端窗口中打开 Python 程序,以便用户可以与其交互。
我在这里遗漏了什么?
答案1
如果您确实需要将其作为捆绑包,那么这里有一个更好的解决方案.app
:
在您的Converter.app/Contents/MacOS/Converter
脚本中,使用“open”命令启动您的 Python 脚本:
open $(dirname "$0")/../Resources/Converter.py
(我在上面做了一个相对路径名技巧,这样你就不需要硬编码一个绝对路径,如果你移动它,这个绝对路径就会被破坏.app
。)
确保你的Resources/Converter.py
脚本顶部有一个 Python shebang:
#!/usr/bin/python
确保MacOS/Converter
和都Resources/Converter.py
标记为可执行(chmod a+x filename
在它们上使用)。
我测试了这个设置,open
命令成功找出了.py
应该在终端中打开一个文件而无需我做任何事情。我不记得我之前.py
在这个系统上将文件与 Terminal.app 关联过,所以我认为即使在干净的系统上,这些说明也不需要任何进一步的步骤。
答案2
制作可在新终端窗口中运行的可双击脚本的最简单方法是将文件名以“.command”结尾。然后,您可以双击脚本文件本身,而不需要 .app 包/包。
如果您想bash
在 Python 之前执行命令,您可以将两者放在同一个文件中,但将 Python 代码包装在语句中bash
exec
。TCL 脚本编写者经常这样做。如果您只想要 Python 代码而不需要bash
代码,请将顶部的 shebang 更改为#!/usr/bin/python
(或 Python 在您的系统中所在的任何位置)。
我个人不喜欢任何以 .app 形式呈现但实际上在终端窗口中运行而不是作为其自己的真实应用程序的东西。我唯一一次看到这样做是 OS X 的 Ixia Chariot 端点。我已经有几年没有看过它了,但它可能仍然以这种方式工作。它是一个免费下载。您可能想要抓住它并看看他们是如何做到的,也许可以发布您自己的问题的答案。我认为他们的解决方案涉及在他们的应用程序中打包一个终端设置文件。我认为这导致一个单独的 Terminal.app 实例以他们奇怪的自定义设置启动,这以一种新鲜而令人兴奋的方式令人讨厌。:)
答案3
尝试将您的脚本更改为具有.command
或.tool
扩展,但它可能无法在最新的 OS X 上运行。
但是如果您需要将脚本作为应用程序,则应该创建一个。
Mac 应用程序的基本结构是:
MyApp.app/
Contents/
Info.plist
MacOS/
Resources/
然后将脚本复制到MacOS/
(与应用程序同名),其中应包含应用程序的独立可执行代码。所有其他资源都放入Resources/
。
请查看应用托马斯(或Mathias 版本) 基本上是这样的:
#!/usr/bin/env bash
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"
用法:
appify foo.sh "Bar"
来源:如何使用 Shell 脚本创建简单的 Mac 应用程序
或者你也可以使用:
- DropScript它允许您创建新的应用程序(例如用 sh、perl 等编写的脚本)。
- 鸭嘴兽- 一款从解释脚本(如 shell 脚本或 Perl、Ruby 和 Python 程序)创建本机 Mac OS X 应用程序的应用程序。
- 在某些具有此类选项的 IDE(例如 Eclipse)中创建它。
或者通过以下方式手动创建:
- 创建应用程序文件夹结构,
- 将您的脚本放入:
MyApp.app/Contents/MacOS/MyApp.app
- 使文件可执行
换句话说 (吉诺):
- 创建你的 shell 脚本(例如
command.sh
)- 授予其执行权限(
chmod 755 ./command.sh
)- 获取信息 → 打开方式:→ (关联终端应用程序)
- 获取信息→(把你想要的图标放在上面)
也可以看看: