从OS X Dock执行Shell脚本?

问题描述:

如何设置一个shell脚本以便从Mac OSX Dock中执行?看起来,简单地创建一个快捷方式将在我的编辑器中打开该文件。有没有我需要设置的标志来告诉它运行而不是打开它进行编辑?从OS X Dock执行Shell脚本?

+2

应该只为头像+1,尽管我也很喜欢这个话题。 – 2010-08-17 08:37:36

您可以创建一个工作流的Automator的足下 - “运行Shell脚本”

然后File > Save As,并更改文件格式为“应用程序”。当您打开应用程序时,它将运行Shell脚本步骤,执行该命令,完成后退出。

好处是它的确实是很简单,你可以非常容易地得到用户输入(比如选择一堆文件),然后将它传递给shell脚本的输入(stdin,或作为参数)。

(Automator的是在你的/Applications文件夹!)

Example workflow

我觉得这个线程可能会有所帮助:http://forums.macosxhints.com/archive/index.php/t-70973.html

套用,你可以用.command扩展其重命名或创建一个AppleScript来运行shell。

+0

至少在Snow Leopard上,向脚本添加.command扩展名会使其在终端中运行,如果您双击该脚本,但出于某种原因您仍然无法将其拖入停靠栏中。但是,dbr和Jeremy的建议都为我工作。 – 2010-12-03 13:25:13

+0

这不适用于OSX 10.9 Mavericks。 – stiemannkj1 2014-06-13 02:24:16

如果您不需要终端窗口,只需将example.sh移动到example.sh.app/Contents/MacOS/example.sh即可创建任何可执行文件。您可以将应用程序像任何其他应用程序一样放置在您的Dock中,并通过单击来执行它。

如果你确实需要显示终端窗口,我没有一个简单的解决方案。你可能可以用Applescript做点什么,但这不是很干净。

+1

你不会知道是否有简单的方法将文件作为参数传递给shell脚本?对于使用“用...打开”打开的文件。 – Fuzzy76 2011-06-14 12:05:43

+0

@Femzzy对不起,不,我从来没有想过。 – 2011-06-15 02:33:44

+5

对于任何尝试这样做的人 - 应用程序的名称必须与脚本名称完全匹配。所以它必须是`example.sh.app`,而不是`example.app`。如果这些应用程序不匹配,您将收到有关受损应用程序的警告 – Kip 2013-08-15 02:35:13

只要您的脚本是可执行文件,并且没有任何扩展名,您可以将它原样拖到Dock的右侧(文档侧),它将在单击时在终端窗口中运行,而不是打开编辑。

如果你想有一个扩展名(比如foo.sh),你可以到Finder的文件信息窗口并且改变该特定脚本的默认应用程序(TextEdit,TextMate,无论设置了什么默认值在您的计算机上.sh文件)到终端。然后它将执行而不是在文本编辑器中打开。再次,您将不得不将其拖动到Dock的右侧。

在脚本编辑器:

do shell script "/full/path/to/your/script -with 'all desired args'

另存为一个应用程序包

由于只要你想要做的就是得到脚本的效果,这将工作正常。你不会看到STDOUT或STDERR。

我知道这是旧的,但如果它是帮助他人:

如果您需要运行一个脚本,并希望终端弹出,所以你可以看到你可以像深渊骑士说,研究结果和将扩展名更改为.command。如果你双击它,它会打开一个终端窗口并运行。

我不过需要这个从automator或者appleScript运行。因此,为了打开一个新终端,我从“运行shell脚本”运行的命令是“打开myShellScript.command”,并在新终端中打开。

正如乔提到的,创建shell脚本,然后创建一个调用shell脚本的applescript脚本,将会实现这一点,并且非常方便。

Shell脚本

  1. 在你喜欢的文本编辑器中创建您的shell脚本,例如:

    mono "/Volumes/Media/~Users/me/Software/keepass/keepass.exe"

    (此运行W32可执行文件,使用单框架)

  2. 保存shell脚本,对于我的示例“StartKeepass.sh”

苹果脚本

  1. 打开的AppleScript编辑器,并调用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 - AppleScript的命令来调用外部shell命令
    • "sh ...." - 这是你的shell脚本(完整路径)在步骤中创建(您也可以直接运行的命令,我可以省略shell脚本,只是运行我的单指令这里)
    • user name - 宣告的AppleScript要为特定的用户身份运行命令
    • "<enter username here> - 替换为您的用户名(保持引号)前 “乔希”
    • password - 宣告AppleScript的密码
    • "<enter password here>" - 与您的密码(保持报价)EX “将mypass”
    • with administrative privileges更换 - 宣称要作为管理员身份运行

建立您.APP

  1. 您的AppleScript RunKeepass.scpt

  2. 保存为filename.scpt,在我的案件另存为...您的AppleScript和更改文件格式应用程序,导致RunKeepass.app在我的情况

  3. 您的应用程序文件复制到您的apps文件夹

有人写...

我只设置在“.SH”结束与终端,打开所有文件。它的作品 罚款,你不必改变你想要运行的每个shell脚本的名称。

在OSX小牛:

  1. 创建您的shell脚本。
  2. 让你的shell脚本可执行:

    chmod +x your-shell-script.sh 
    
  3. 重命名你的脚本有.app后缀:

    mv your-shell-script.sh your-shell-script.app 
    
  4. 将脚本OSX的码头。
  5. 重命名你的脚本回.sh后缀:

    mv your-shell-script.app your-shell-script.sh 
    
  6. 右键单击Finder中的文件,然后点击“获取信息”选项。
  7. 在窗口的底部,将shell脚本设置为使用终端打开。

现在,当您点击停靠栏中的脚本时,会弹出一个终端窗口并执行脚本。

奖励:要在脚本完成时让终端关闭,请将exit 0添加到最后,并将终端设置更改为“关闭shell,如果干净地退出”就像它在this SO answer中所做的那样。