2009-08-20 18 views
7

OS XでJavaプログラムを起動するための簡単なbashスクリプトを作成したいと思います。ファイル名、ファイルパス、および直後の作業フォルダにはすべてスペースが含まれています。私はこれを行うと:OS X bash:dirname

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

は、私はまた、別の場所のすべての種類の引用符を入れて試してみました

usage: dirname path 

を取得します。最も精巧な例があります。

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

何も機能していません。私は、エラーメッセージか、そのぎこちない "usage:dirname path"メッセージを受け取ります。

他にも有効な方法はありますか?


編集:これはそれだけで私のボックスでなければならないので、誰もが、私にとっては問題ではないようです。私はこの特定の問題のために働く唯一の解決策であるため、私自身の投稿を受け入れるつもりです。しかし、私は間違いなく他の人のために働いているようで、本当に皆の助けに感謝するソリューションをアップボーニングしています。ここに私の作品

cd "$(dirname "$0")" 

:何について

+0

'echo $ 0'は何の収穫ですか? dirnameは$ 0の値に固有の何かに問題があるかもしれません。別のディレクトリのスクリプトでこれを実行しようとしましたか? – fbrereto

+0

2つ目の例は、6つのレベルのディレクトリで、他のすべての祖先がその名前に少なくとも1つのスペースを持つ場所で動作します。 – Chuck

+0

dirnameのマンページを見てみませんか? –

答えて

3

は何ようやく私のために働いたことは、これを変更しています。私はそれを見つけたのはここです:http://rentzsch.com/unix/locationAwareCommandFiles何かにあなたの

#!/bin/sh 

ポイントはそれをbashのされていないことを

+0

ちょうど興味があります - 私とネッドの解決策で何が失敗したのですか?アーカイブにふさわしい場合は、私の回答を更新したいと思います。 –

+1

ありがとうございます。 Zシェル。クール。 –

+0

@Sean:私はまだ "usage:dirname path"を得続けています。私はそれが私のマシンと関係していると思います。しかし、このzシェルの解決策は私のために働いた。奇妙な。 – Dinah

12

。内側の二重引用符をエスケープ

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

不要です:

cd "`dirname "$0"`" 

しかし、それはおそらく$ 0何とか値は空のように見えるということである、問題の根本を取得、またはしません何か奇妙なもの。

実行する前に、変数を補間して各行をエコーし​​ます。これはデバッグに非常に便利です。また、非常に役立ちます。また、これは、スペースを含むファイル名やファイルパスをサポートしてい

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

:これに

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

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

これについてちょっとわからない...しかし、それは可能ですか?私が普段使用しているのは、

#!/usr/bin/bash 

かなり新しいものですので、よく分かりません。