我是Windows和Linux的长期用户,并且在Mac OS X上编写shell脚本有一些奇怪的经历。特别是,我可以编写脚本并从终端运行它们,但每次我尝试运行一个在Finder窗口中,它始终从用户的主目录而不是脚本所在的目录执行。也就是说,如果脚本位于
~/path/to/the/script.sh
它总是耗尽~
。在过去,我不得不问我更多精通Mac的朋友如何解决这个问题,并且他们经常使用一些非常糟糕的技术来做到这一点,但我认为没有任何理由说明为什么会这样。
我的问题是 - 有没有一种简单的方法可以在Mac OS X中编写一个shell脚本,当在Finder中双击时,它会用完它所在的目录?
答案 0 :(得分: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 %
答案 1 :(得分:2)
如果您希望脚本用完它所在的目录,则脚本必须更改其工作目录。鉴于您的示例是用bash编写的,我将使用bash示例进行响应。 $ _值设置为当前脚本的绝对路径。您可以通过运行man bash
找到更多信息#!/bin/bash
PROGPATH=$(dirname $_)
cd $PROGPATH
# Do your stuff here
答案 2 :(得分:1)
这将取决于脚本为您更改目录。检查 this page。
答案 3 :(得分:1)
$0
的目的是解决这个问题。