【问题标题】:Run Shellscript from Mac Automator从 Mac Automator 运行 Shell 脚本
【发布时间】:2014-09-29 10:20:18
【问题描述】:

在 OS X 10.9.5 中

我写了一个 Shell 脚本(通过 vim)。保存并导航到此脚本并

sh code.shit 运行完美(在 iTerm 和总终端中)。

同一目录中的同一命令通过 Mac Automator 总是产生错误。为什么?

在 Automator 和终端中。

echo $SHELL /bin/bash 为什么无法通过 Automator 运行 shellscript。

【问题讨论】:

  • 为我工作。 code.sh 是否期望从某个地方获得一些输入?你能用sh -x(或者更确切地说,bash -x,如果它真的是一个 Bash 脚本的话)来运行它,看看它到底在哪里失败了?
  • 文件是否有尾随换行符?对我来说,它不会打印任何东西,但会成功;但我有一个不同版本的 OSX 用于测试(一些非常旧的版本)。
  • "Gestoppt" 听起来不像是一个错误,不过。您是否在大约 30 秒后手动停止它?
  • “Gestoppt”:在德语中的意思是“停止”。这不是通常的can't find lib-x or lib-y。只有停止。 Shell 脚本本身包含一个 RScriptRscript -e 'shiny::runApp(("/Users/Einstein/Git/RShiny/fooapp"),launch.browser=TRUE)'
  • 嗯,是的,如果我在运行命令中输入sleep 1000,并在允许它运行一段时间后按下停止按钮,我会收到基本相同的消息(尽管不是德语)。所以我想这也是你所做的。

标签: macos bash automator


【解决方案1】:

可以通过在当前代码上方添加以下代码来解决此问题:

export PATH=/usr/local/bin:$PATH

【讨论】:

    【解决方案2】:

    我怀疑是cd Desktop 位。你可以试试:

    (cd ~/Desktop; sh code.sh)
    

    但是:

    • 您应该使code.sh 可执行,因此您不需要使用sh 调用它。这是通过chmod 0755 code.sh 完成的。

    • 如果您需要 shell 脚本从某个目录(即脚本所在的目录)运行,则将其构建到脚本中,以便仅使用 ~/Desktop/code.sh 调用它:

      #!/bin/bash
      dir=$(dirname $0)
      cd $dir
      # do work
      

    例如:

    ➜  ~  cat tmp/code.sh
    #!/bin/bash
    dir=$(dirname $0)
    cd $dir
    ls -l
    
    ➜  ~  chmod 0755 tmp/code.sh
    ➜  ~  tmp/code.sh
    total 64
    drwxr-xr-x   6 andy  staff    204 Feb 22 18:53 Archives
    drwxr-xr-x  11 andy  staff    374 Jun 18 13:59 DerivedData
    -rw-r--r--   1 andy  staff    225 May 20 13:44 MyFirstProgram.X
    -rwxr-xr-x   1 andy  staff   3072 May 20 13:44 MyFirstProgram.exe
    drwxr-xr-x   3 andy  staff    102 Jan  6  2014 bug_reports
    -rwxr-xr-x   1 andy  staff     43 Aug  6 14:15 code.sh
    -rw-r--r--   1 andy  staff  11539 May 20 08:33 iOS_Team_Provisioning_Profile_.mobileprovision
    -rw-r--r--   1 andy  staff   1438 May 20 08:40 ios_development.cer
    -rwxr-xr-x   1 andy  staff    272 Aug  5 08:55 script.sh
    

    【讨论】:

    • 谢谢。这适用于任何“正常”的 shell 脚本。
    • @Teletubbi-osx 对不起,我不明白你在说什么。
    • 您的示例运行完美!我的问题:我的 shell 脚本包含易于由 iTerm/Terminal 等运行但不是来自 Automator 的“材料”。我用 5 台 OS X 机器(macbook air、macbook pro、iMac;10.9.4/10.9.5)重现了这个问题。它总是一样的;从终端工作不适用于 Automator。所以很明显,autmator是问题所在。当您通过终端执行Rscript -e 'shiny::runApp(("/Users/Einstein/Git/RShiny/fooapp"),launch.browser=TRUE)' 时,您可以看到加载过程并打开浏览器 - 完美。在 Automator 中,没有输出...
    【解决方案3】:

    解决方案

    创建两个输出文件: 在自动机中: env > ~/Desktop/file_1.txt 在 iTerm 中: env > ~/Desktop/file_2.txt

    差异

    diff -y ~/Desktop/file_1.txt ~/Desktop/file_2.txt

    而且,瞧,有一些有趣的差异! 插入差异,例如export LANG=de_DE.UTF-8 到脚本,它的工作原理!

    【讨论】:

    • Automator 和终端之间PATH 变量的差异是造成这种情况的主要原因。 Automator 默认为PATH=/usr/bin:/bin:/usr/sbin:/sbin,而环境变量类似于PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin,因此Automator 缺少/usr/local/bin。在 Automator 脚本中导出 PATH 确实可以解决问题。
    猜你喜欢
    • 2016-02-29
    • 2019-11-19
    • 2021-04-24
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 2011-03-02
    • 2020-05-24
    相关资源
    最近更新 更多