13

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

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

我明白了

usage: dirname path

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

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

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

还有哪些其他可行的方法?


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

4

5 回答 5

14

关于什么:

cd "$(dirname "$0")"

这对我有用。

于 2009-08-20T21:10:23.940 回答
6
#!/bin/sh
cd "$(dirname "$0")"
于 2009-08-20T21:20:11.737 回答
4

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

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

对此:

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

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

于 2009-08-20T22:20:54.140 回答
3

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

cd "`dirname "$0"`"

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

bash -x scriptname

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

-u: abort on attempt to use undefined variable
-e: abort on first error
于 2009-08-20T21:36:48.350 回答
1

嘿不确定这个...但是有没有可能你的

#!/bin/sh 

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

#!/usr/bin/bash

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

于 2010-03-15T18:49:25.763 回答