我需要编写一个脚本,它可以从任何位置调用,但需要从它所在的目录运行。该脚本应该在运行时查询其目录。
如何实现这一点?
例子:
- 脚本
hello.sh
位于/someplace/
/other/place/
虽然它被称为- 脚本(在运行时)知道它驻留在
/someplace
编辑
附加问题:
脚本的位置怎么样,但符号链接已解析?
例子:
- 脚本
hello.sh
位于/someplace/
- 符号链接存在于
/bin
- 尽管符号链接是从 调用的
/other/place/
, - 脚本(在运行时)知道它驻留在
/someplace
答案1
echo $(dirname $0)
或者
echo ${0%/*}
答案2
对于我的附加问题:我发现这是有效的:
echo $(dirname $(readlink $0))
或者
echo `dirname \`readlink $0\``
编辑
似乎,这个答案与 Dennis Williamson 用解决方案评论他的答案同时出现;)
答案3
检查 shell 变量 $_
来自 bash 手册页:
在 shell 启动时,设置为用于调用在环境或参数列表中传递的正在执行的 shell 或 shell 脚本的绝对路径名。随后,在扩展后扩展为上一个命令的最后一个参数。还设置为用于调用每个执行的命令的完整路径名,并放置在导出到该命令的环境中。检查邮件时,此参数保存当前正在检查的邮件文件的名称。