我想创建一个简单的bash脚本来在OS X上启动Java程序。文件名,文件路径和直接工作文件夹都包含空格。当我这样做时:
#!/bin/sh
cd `dirname $0`
我得到了
usage: dirname path
我也试过在各种不同的地方加上引号。
是最精巧的例子cd "`dirname \"$0\"`"
没有任何效果。我要么得到错误消息,要么得到含糊的“用法:dirname路径”消息。
可能有哪些其他方法可用?
编辑:对于除了我以外的任何人来说,这似乎不是问题所以它必须只是我的盒子。我将在下面接受我自己的帖子,因为它是解决这个特定问题的唯一解决方案。但是我绝对赞同那些似乎对其他人都有用的解决方案,非常感谢大家的帮助。
答案 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
对整个脚本编写的东西很新,所以不确定。