如何查找当前进程/可执行文件运行的路径?

时间:2009-03-19 05:35:35

标签: unix path

我在连接到本地unix服务器盒时运行了一些可执行文件。

说,我正在尝试运行可执行文件'abc'。现在服务器可能为'abc'提供了别名。我如何知道这条路径?就像在,如果我调用'abc',它实际上可以从/ opt / corp / xyz / abc运行它。我如何知道我正在调用可执行文件的路径?

顺便说一句,我在HP-UX上运行:D

6 个答案:

答案 0 :(得分:10)

which abc”显示您要拨打的abc

或“alias”列出别名

或许从脚本内部“回显$ 0”,或以其他方式检索argv [0]。

答案 1 :(得分:4)

如果使用PATH环境变量运行,可以尝试:

$ which abc

$ whereis abc

如果该命令有符号链接,并且您想知道“真实”目标,则可以使用以下内容:

$ readlink /opt/corp/xyz/abc

我现在无法访问我面前的HPUX系统,但这应该可行:

$ ls -l /opt/local/bin/wish
lrwxr-xr-x  1 root  admin  22 Feb  3 21:56 /opt/local/bin/wish@ -> /opt/local/bin/wish8.5
$ readlink /opt/local/bin/wish
/opt/local/bin/wish8.5

如果命令基于别名,则以下内容将显示别名定义。

$ alias abc

取决于系统的配置方式,上述命令应提供问题的多种变体的答案。

Perl中的

$running_script = $0;
来自Python的

,请参阅SO How to get filename of the __main__ module in Python?

答案 2 :(得分:2)

HP-UX是否具有“which”命令?运行:

which abc

如果你拥有它,which命令将告诉你哪个abc程序将从你的$PATH运行。

答案 3 :(得分:2)

谢谢大家! '那是'我追求的命令!我现在正在面对自己,因为我已经知道了命令(在Ubuntu中).. 它确实像HP-UX中的魅力一样工作!

编辑:popcnt建议''whereis'更合适! Thanx很多男人!

答案 4 :(得分:1)

从命令行终端:

$ abc

的/ opt / CORP / XYZ / ABC

答案 5 :(得分:1)

在Unix上获取脚本路径的正确方法是:

dir=$(cd $(dirname "$0"); pwd)

背景:$ 0是脚本相对于当前目录的文件名+路径。它可以是绝对的(/...)或相对的(../dir/...)。所以$(dirname "$0")返回路径(没有文件名)。记住报价; “$ 0”可以包含空格和其他奇怪的东西。

然后我们cd进入该目录,pwd将返回我们结束的绝对路径。

适用于kshbash

在C程序中,您应该检查argv[0]。我不确定shell是否会将完整路径放在那里。如果您遇到问题,我建议您将可执行文件包装在一个准备环境的小脚本中,然后使用以下命令调用您的可执行文件:

exec "$dir/"exe "$@"