2011-01-05 135 views
8

我是一位長期使用Windows和Linux的用戶(我對Mac沒有什麼 - 我從來沒有擁有過),並且在過去有一些奇怪的經歷在Mac OS X上編寫shell腳本。特別是,我可以編寫腳本並且從終端運行它們,但每次我嘗試從Finder窗口運行它時,它總是從用戶的主目錄執行,而不是腳本所在的目錄。也就是說,如果腳本位於Mac OS X中的shell腳本從主目錄運行?

~/path/to/the/script.sh 

它總是用完~。在過去,我不得不問我的更多Mac精明的朋友如何解決這個問題,而且他們經常使用一些令人反感的技術來完成這項工作,但我沒有看到爲什麼會出現這種情況。

我的問題是 - 是否有一種簡單的方法可以在Mac OS X中編寫一個shell腳本,當在Finder中雙擊時,它會用盡它所在的目錄?

+1

爲什麼你期望它做的不是?這只是定義的行爲。 – bmargulies 2011-01-05 02:06:37

+0

「根目錄」!=「用戶的主目錄」 – 2011-01-05 02:08:21

+0

至少在Windows中,從瀏覽器窗口運行程序時得到的默認行爲是該程序運行在它所在的目錄之外。也許這是例外而非規則,但這是我最習慣的。 – templatetypedef 2011-01-05 02:12:21

回答

13

這種行爲似乎與我一致。它繼承你的finder實例環境,它將植根於你的主目錄。

但是,這並不難解決。

cd "$(dirname "$0")" 

應該做的伎倆ALA:

richh-desktop % fullname.sh 
/home/richh/bin 
richh-desktop % cd .. 
richh-desktop % fullname.sh 
/home/richh/bin 
richh-desktop %   
+0

如果任何文件名中有空格(這是OS X - 文件名中有空格),請雙引號路徑:'cd「$(dirname」$ 0「)」' – 2011-01-05 16:49:19

+0

@Gordon Davisson:謝謝。 – richo 2011-01-06 01:24:47

2

如果您希望腳本用盡它所在的目錄,腳本將不得不更改其工作目錄。鑑於你的例子是用bash編寫的,我將以bash例子作爲迴應。 $ _值被設置爲當前腳本的絕對路徑。你可以通過運行男子bash找到更多的信息

#!/bin/bash 

PROGPATH=$(dirname $_) 
cd $PROGPATH 

# Do your stuff here