【问题标题】:OSX How do I have a Shell script change directory to the one the script is in?OSX 如何将 Shell 脚本更改目录更改为脚本所在的目录?
【发布时间】:2014-04-12 15:16:47
【问题描述】:

我正在使用 Apple 的 automator 创建一个 Shell 脚本。如果我将目录专门更改为 jar 文件所在的位置,我可以让它运行。但是,如果我想切换到 Shell 脚本恰好运行的目录怎么办?

现在我有以下工作:

cd desktop/CommonDenom/
java -XstartOnFirstThread -jar CommonDenom.jar

我知道有一种方法可以针对启动 Shell 脚本的任何目录,但我似乎无法得到任何工作。请具体说明,因为我使用 Automator 的时间不长。除非有人可以指定如何在没有 Automator 的情况下编写脚本。提前致谢。

【问题讨论】:

    标签: java macos shell jar automator


    【解决方案1】:

    shell 脚本中的标准用法是dirname $0$0 变量是已执行脚本的路径,dirname 命令采用路径并剥离最后一个组件以保留包含目录的路径

    cd "`dirname $0`"
    

    【讨论】:

    • 谢谢。这个问题本身就可以回答,但如果你想确认一下:cd "dirname $0" 是一个 shell 脚本命令,对吗?这在终端失败,这是正确的,因为如果不是脚本的一部分,它就没有上下文。
    • @Ian Roberts cd "dirname $0" 不起作用。它返回“操作“运行 Shell 脚本”遇到错误。检查操作的属性并尝试再次运行工作流。这是我正在尝试的:cd "dirname $0" cd CommonDenom/ java -XstartOnFirstThread -jar CommonDenom.jar 这是有效的:@987654330 @ She 脚本位于 Macintosh HD/Applications 中。包含 jar 的其余文件位于 /Macintosh HD/Appications/CommonDenom/
    • 等等。那些蜱虫应该在那里吗? cd "dirname $0" 还是您只是将它们放入帖子的格式中?
    • @StuartKuredjian 后面的勾必要的。它们是运行一个命令并在字符串中捕获其输出以用作另一个命令的一部分的方式。
    • 仅供参考,我只是在我的 Mac 上的 shell 脚本中使用了它,并由于一些奇怪的错误对其进行了轻微更改。如果路径中有空格,$0 周围的额外引号可能是必要的。 cd "`dirname -- "$0"`"
    【解决方案2】:

    只是想在这里权衡一下。我见过一些人有这个问题。如果您只是在 OSX 上并制作自己的脚本。这可以解决问题 :) 有点像黑客,但就像一个魅力。

    #! /bin/bash 
    
    sudo /Applications/XAMPP/xamppfiles/xampp startapache
    
    open /Applications/XAMPP/htdocs
    

    【讨论】:

      【解决方案3】:
      #!/bin/bash
      DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
      cd "${DIR}"
      
      ...the rest of your script...
      

      感谢 Ian C. 在 AskDifferent:https://apple.stackexchange.com/a/179064

      【讨论】:

        【解决方案4】:

        我不确定您的意思是“您想将目录更改为运行脚本的位置”,因为无论如何您都将位于脚本运行的目录中,因此无需更改目录.我认为您的意思是您希望脚本保留在它开始的任何位置,但仍然能够找到 jar 文件。

        在这种情况下,您可能只需要以下内容而无需更改目录:

        java -XstartOnFirstThread -jar ~/Desktop/CommonDemon/CommonDemon.jar
        

        【讨论】:

        • "因为无论如何你都会在运行脚本的目录中" - 不,你不一定是。假设您当前的工作目录是/foo/bar,那么您可以使用/some/other/dir/someScripts.sh 运行脚本,当前目录不会是脚本所在的目录
        • 好点,谢谢。也许 OP 可以帮助他更清楚地说明他想要什么......
        • 标记是正确的。如果正在启动的 .jar 文件放在 ApplicationsDesktop 或任何位置,当终端第一次打开时,它与启动的文件不在同一目录中。因此,我需要一种方法来告诉脚本首先更改到启动文件所在的目录。我在另一篇文章中使用dirnmame $0 遵循了说明,但它不起作用。现在我有新鲜的眼睛,我会再试一次,
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-28
        • 2010-10-05
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多