如何设置 shell 脚本以从 Mac OSX 扩展坞执行?似乎只需创建一个快捷方式即可在我的编辑器中打开该文件。我需要在某处设置一个标志来告诉它运行而不是打开它进行编辑吗?
10 回答
您可以通过一个步骤创建 Automator 工作流程 - “运行 Shell 脚本”
然后File > Save As
,将文件格式更改为“应用程序”。当您打开应用程序时,它将运行 Shell Script 步骤,执行命令,完成后退出。
这样做的好处是它非常简单,您可以非常轻松地获取用户输入(例如,选择一堆文件),然后将其传递给 shell 脚本的输入(传递给标准输入,或作为参数)。
(Automator 在您的/Applications
文件夹中!)
如果您不需要终端窗口,您只需创建一个 shell 脚本Example
并将其移动到 filename即可将任何可执行文件变成应用程序Example.app/Contents/MacOS/Example
。您可以像任何其他应用程序一样将这个新应用程序放在您的 Dock 中,然后单击执行它。
注意:应用程序的名称必须与脚本名称完全匹配。所以顶级目录必须是,子目录Example.app
中的脚本Contents/MacOS
必须是命名Example
的,并且脚本必须是可执行的。
如果您确实需要显示终端窗口,我没有简单的解决方案。你可能可以用 Applescript 做点什么,但这不是很干净。
在 OSX Mavericks 上:
- 创建你的 shell 脚本。
使您的 shell 脚本可执行:
chmod +x your-shell-script.sh
重命名您的脚本以具有
.app
后缀:mv your-shell-script.sh your-shell-script.app
- 将脚本拖到 OSX 扩展坞。
将脚本重命名为
.sh
后缀:mv your-shell-script.app your-shell-script.sh
- 右键单击 Finder 中的文件,然后单击“获取信息”选项。
- 在窗口底部,将 shell 脚本设置为使用终端打开。
现在,当您单击 Dock 中的脚本时,将弹出一个终端窗口并执行您的脚本。
奖励:要在脚本完成后关闭终端,请添加exit 0
到末尾并将终端设置更改为“如果干净退出则关闭外壳”,就像它在这个 SO answer中所说的那样。
我知道这很旧,但如果它对其他人有帮助:
如果您需要运行脚本并希望终端弹出以便您可以看到结果,您可以像深渊骑士所说的那样将扩展名更改为 .command。如果双击它,它将打开一个终端窗口并运行。
但是,我需要从 automator 或 appleScript 运行它。因此,为了打开一个新终端,我从“运行 shell 脚本”运行的命令是“打开 myShellScript.command”,它在一个新终端中打开。
只要您的脚本是可执行的并且没有任何扩展名,您就可以将其按原样拖动到 Dock 的右侧(文档侧),单击时它将在终端窗口中运行,而不是打开编辑器。
如果您想要扩展名(如 foo.sh),您可以转到 Finder 中的文件信息窗口并更改该特定脚本的默认应用程序(TextEdit、TextMate、计算机上设置的任何默认值) .sh 文件)到终端。然后它将只执行而不是在文本编辑器中打开。同样,您必须将其拖到 Dock 的右侧。
在脚本编辑器中:
do shell script "/full/path/to/your/script -with 'all desired args'
"
另存为应用程序包。
只要您想要做的就是获得脚本的效果,这将可以正常工作。您不会看到 STDOUT 或 STDERR。
我认为这个线程可能会有所帮助:http ://forums.macosxhints.com/archive/index.php/t-70973.html
换句话说,您可以使用 .command 扩展名重命名它,或者创建一个 AppleScript 来运行 shell。
正如 joe 所提到的,创建 shell 脚本,然后创建一个 applescript 脚本来调用 shell 脚本,将完成此操作,并且非常方便。
外壳脚本
在您喜欢的文本编辑器中创建您的 shell 脚本,例如:
mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"
(这运行 w32 可执行文件,使用 mono 框架)
保存 shell 脚本,例如“StartKeepass.sh”
苹果脚本
打开 AppleScript Editor,并调用 shell 脚本
do shell script "sh /Volumes/Media/~Users/me/Software/StartKeepass.sh" user name "<enter username here>" password "<Enter password here>" with administrator privileges
do shell script
- 用于调用外部 shell 命令的 applescript 命令"sh ...."
- 这是您在第一步中创建的 shell 脚本(完整路径)(您也可以运行直接命令,我可以省略 shell 脚本并在此处运行我的单声道命令)user name
- 向 applescript 声明您希望以特定用户身份运行命令"<enter username here>
- 替换为您的用户名(保留引号)前“josh”password
- 向applescript声明您的密码"<enter password here>"
- 替换为您的密码(保留引号),例如“mypass”with administrative privileges
- 声明你想以管理员身份运行
创建您的 .APP
将您的 applescript 保存为 filename.scpt,在我的情况下为 RunKeepass.scpt
另存为...您的applescript并将文件格式更改为应用程序,在我的情况下导致RunKeepass.app
将您的应用程序文件复制到您的应用程序文件夹
pip install mac-appify
我在接受解决方案时遇到了麻烦,但这个命令对我有用。
安装
pip install mac-appify
跑
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/appify ~/bin/webex_start.sh ~/Desktop/webex.app
有人写...
我只是将所有以“.sh”结尾的文件设置为使用终端打开。它工作正常,您不必更改要运行的每个 shell 脚本的名称。