Linux:如何以知道其目录的方式执行脚本?

Linux:如何以知道其目录的方式执行脚本?

我需要编写一个脚本,它可以从任何位置调用,但需要从它所在的目录运行。该脚本应该在运行时查询其目录。

如何实现这一点?

例子:

  • 脚本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 脚本的绝对路径名。随后,在扩展后扩展为上一个命令的最后一个参数。还设置为用于调用每个执行的命令的完整路径名,并放置在导出到该命令的环境中。检查邮件时,此参数保存当前正在检查的邮件文件的名称。

相关内容