OS X中的bash:dirname

14

我想在 OS X 上创建一个简单的 bash 脚本来启动 Java 程序。文件名、文件路径和当前工作文件夹中都包含空格。当我执行以下操作时:

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

我得到

usage: dirname path

我也尝试过在各种不同的位置放置引号。最复杂的例子是

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

没有任何方法起作用。我要么得到错误消息,要么得到那个晦涩的“usage: dirname path”的消息。

还有其他可能有效的方法吗?


编辑:这似乎不是其他人的问题,只是我的电脑出了点问题。我将接受下面的帖子,因为它是唯一适用于这个特定问题的解决方案。但是,我一定会赞赏那些对其他人有效的解决方案,并感激大家的帮助。


echo $0 会输出什么?dirname 可能会出现关于 $0 值的特定问题。您尝试在不同目录中运行脚本了吗? - fbrereto
你的第二个例子对我来说可行,其中一个祖先目录的名称中每隔一个都至少有一个空格,且该目录深度为六级。 - Chuck
你有没有试过查看dirname的手册页? - Matt Ball
@Matt - 我现在正在看它。我应该找什么? - Sean Bright
5个回答

14

那么这个怎么样:

cd "$(dirname "$0")"

那在这里对我有效。


6
#!/bin/sh
cd "$(dirname "$0")"

6

只是好奇 - 我和Ned的解决方案哪里出了问题?如果适用于档案,我想更新我的答案。 - Sean Bright
@Sean:我仍然不断收到“usage: dirname path”的提示。我认为这与我的机器有关。但是这个z shell解决方案对我有效。很奇怪。 - Dinah
1
你也可以尝试使用/bin/bash - 我认为/bin/sh是一个指向/bin/bash的符号链接,但bash会查看它是如何被调用的,并相应地更改一些行为。因此,如果您使用/bin/sh调用它 - Peter Bagnall
1
@PeterBagnall 我相信你是对的。他应该使用 /bin/bash... http://stackoverflow.com/questions/11061727/why-will-script-work-with-bin-bash-but-not-bin-sh - flagoworld

3
今日免费次数已满, 请开通会员/明日再来
cd "`dirname "$0"`"

但这并没有解决问题的根本,问题在于某种方式下$0的值似乎为空或者是一些奇怪的东西。尝试以以下方式运行你的脚本:

bash -x scriptname

这将在运行之前,对每一行进行变量内插并输出。它对于调试非常有用。另外,以下内容也非常有帮助:

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

1

嘿,不太确定这个问题……但是你的程序是否有可能

#!/bin/sh 

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

#!/usr/bin/bash

我对整个脚本编写的事情还比较陌生,不太确定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接