2011-01-05 151 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