【问题标题】:OS X bash: dirnameOS X bash:目录名
【发布时间】:2010-11-21 11:36:45
【问题描述】:

我想创建一个简单的 bash 脚本来在 OS X 上启动 Java 程序。文件名、文件路径和直接工作文件夹都包含空格。当我这样做时:

#!/bin/sh
cd `dirname $0`

我明白了

usage: dirname path

我也尝试在各种不同的地方加上引号。最详细的例子是

cd "`dirname \"$0\"`"

没有任何效果。我要么收到错误消息,要么收到神秘的“用法:目录名路径”消息。

还有哪些可行的方法?


编辑:这似乎对我以外的任何人都不是问题,所以它一定只是我的盒子。我将在下面接受我自己的帖子,因为这是解决此特定问题的唯一解决方案。但是,我绝对赞成似乎对其他人有用的解决方案,并非常感谢大家的帮助。

【问题讨论】:

  • echo $0 产生了什么? dirname 可能对 $0 的值有问题。您是否尝试过在不同目录中使用脚本运行它?
  • 您的第二个示例适用于我,其目录深度为六层,其中每个其他祖先的名称中至少有一个空格。
  • 曾经尝试查看 dirname 的联机帮助页吗?
  • @Matt - 我现在正在看。我在找什么?

标签: bash macos dirname


【解决方案1】:

怎么样:

cd "$(dirname "$0")"

这对我有用。

【讨论】:

    【解决方案2】:
    #!/bin/sh
    cd "$(dirname "$0")"
    

    【讨论】:

      【解决方案3】:

      最终对我有用的是改变这一点:

      #!/bin/sh
      cd `dirname $0`
      

      到这里:

      #! /bin/zsh
      cd "${0:h}"
      

      这也支持包含空格的文件名和文件路径。这是我找到它的地方:http://rentzsch.com/unix/locationAwareCommandFiles

      【讨论】:

      • 只是好奇 - 我和 Ned 的解决方案出了什么问题?如果适用于档案,我想更新我的答案。
      • @Sean:我仍然不断收到“用法:目录名路径”。我认为这与我的机器有关。但是这个 z shell 解决方案对我有用。很奇怪。
      • 您也可以尝试 /bin/bash - 我认为 /bin/sh 是 /bin/bash 的符号链接,但 bash 会查看它是如何被调用的,并相应地改变它的一些行为。所以如果你用 /bin/sh 调用它
      • @PeterBagnall 我相信你是对的。他应该使用 /bin/bash...stackoverflow.com/questions/11061727/…
      【解决方案4】:

      不需要转义内部双引号:

      cd "`dirname "$0"`"
      

      但这并没有解决问题的根源,即 $0 的值不知何故似乎为空,或者可能是一些奇怪的东西。尝试以这种方式更改运行脚本:

      bash -x scriptname
      

      这将在运行之前回显每一行,并插入变量。它对调试非常有用。也很有帮助的是:

      -u: abort on attempt to use undefined variable
      -e: abort on first error
      

      【讨论】:

        【解决方案5】:

        嘿,对此不确定...但是您的

        #!/bin/sh 
        

        指向不是 bash 的东西?我通常使用的是:

        #!/usr/bin/bash
        

        对整个脚本编写来说还很陌生,所以不确定。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-19
          • 2012-03-05
          • 1970-01-01
          • 2011-12-16
          • 2012-03-23
          • 1970-01-01
          • 2011-05-06
          相关资源
          最近更新 更多