从OS X Dock执行Shell脚本?

时间:2008-11-11 16:24:50

标签: macos shell

如何设置从Mac OSX基座执行的shell脚本?似乎只需创建一个快捷方式就可以在我的编辑器中打开该文件。是否有一个标志我需要设置某个地方告诉它运行而不是打开它进行编辑?

10 个答案:

答案 0 :(得分:175)

您可以通过一个步骤创建Automator工作流程 - “运行Shell脚本”

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

这样做的好处是真的很简单,你可以很容易地获得用户输入(比如选择一堆文件),然后将它传递给shell脚本的输入(要么是stdin,要么是参数。

(Automator位于您的/Applications文件夹中!)

Example workflow

答案 1 :(得分:42)

如果您不需要终端窗口,只需将example.sh移至example.sh.app/Contents/MacOS/example.sh即可将任何可执行文件作为应用程序。您可以像在任何其他应用程序中一样将应用程序放在Dock中,然后单击执行它。

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

答案 2 :(得分:20)

在OSX Mavericks上:

  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脚本设置为使用终端打开。
  8. 现在当你点击停靠栏中的脚本时,会弹出一个终端窗口并执行你的脚本。

    奖励:要在脚本完成后关闭终端,请在末尾添加exit 0并将终端设置更改为"如果干净地退出则关闭shell#34;就像它在this SO answer中所说的那样。

答案 3 :(得分:17)

我知道这已经过时了,但如果它对其他人有帮助:

如果您需要运行脚本并希望终端弹出,这样您就可以看到Abyss Knight所说的结果,并将扩展名更改为.command。如果双击它,它将打开一个终端窗口并运行。

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

答案 4 :(得分:7)

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

如果你想拥有一个扩展名(比如foo.sh),你可以转到Finder中的文件信息窗口,然后从它的任何位置更改该特定脚本的默认应用程序(TextEdit,TextMate,无论默认设置是什么)您的计算机用于.sh文件)到终端。然后它将执行而不是在文本编辑器中打开。同样,您必须将它拖到Dock的右侧。

答案 5 :(得分:5)

我认为此主题可能会有所帮助:http://forums.macosxhints.com/archive/index.php/t-70973.html

要解释,您可以使用.command扩展名重命名它,或者创建AppleScript来运行shell。

答案 6 :(得分:4)

在脚本编辑器中:

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

另存为应用程序包。

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

答案 7 :(得分:4)

正如joe所提到的,创建shell脚本然后创建一个用于调用shell脚本的applescript脚本将完成此任务,并且非常方便。

Shell脚本

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

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

    (这使用单声道框架运行w32可执行文件)

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

  3. Apple脚本

    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 - 用于调用外部shell命令的applescript命令
      • "sh ...." - 这是您在第一步中创建的shell脚本(完整路径)(您也可以运行直接命令,我可以省略shell脚本,只需在此运行我的mono命令)
      • user name - 声明要以特定用户身份运行命令的AppleScript
      • "<enter username here> - 替换为您的用户名(保留引号)ex“josh”
      • password - 声明为您的密码
      • "<enter password here>" - 替换为您的密码(保留引号)ex“mypass”
      • with administrative privileges - 声明您想以管理员身份运行
    2. 创建.APP

      1. 将你的applescript保存为filename.scpt,在我的例子中是RunKeepass.scpt

      2. 另存为...你的Applecript并将文件格式更改为应用程序,导致我的案例中的RunKeepass.app

      3. 将您的应用文件复制到您的应用文件夹

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

有人写道......

  

我只是将所有以“.sh”结尾的文件设置为以终端打开。有用   很好,你不必更改每个shell脚本的名称   想跑。