OS X bash:dirname

时间:2009-08-20 21:08:16

标签: bash macos dirname

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

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

我得到了

usage: dirname path

我也试过在各种不同的地方加上引号。

是最精巧的例子
cd "`dirname \"$0\"`"

没有任何效果。我要么得到错误消息,要么得到含糊的“用法:dirname路径”消息。

可能有哪些其他方法可用?


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

5 个答案:

答案 0 :(得分:12)

怎么样:

cd "$(dirname "$0")"

这对我有用。

答案 1 :(得分:5)

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

答案 2 :(得分:3)

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

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

对此:

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

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

答案 3 :(得分:2)

转义内部双引号是不必要的:

cd "`dirname "$0"`"

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

bash -x scriptname

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

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

答案 4 :(得分:0)

嘿,不确定这个...但是你的

是否可能
#!/bin/sh 

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

#!/usr/bin/bash

对整个脚本编写的东西很新,所以不确定。