如何找到当前进程/可执行文件所在的路径?

6
我正在连接到本地Unix服务器并运行一些可执行文件。
比如,我想运行一个名为'abc'的可执行文件。现在服务器可能已经提供了'abc'的别名... 我该如何知道这个路径呢?也就是说,如果我调用'abc',它实际上可能会从/opt/corp/xyz/abc运行.. 我该如何知道我正在调用可执行文件的路径?
顺便说一下,我正在HP-UX上运行 :D
6个回答

10

使用"which abc"命令可以显示将要调用的abc命令。

或者使用"alias"命令来列出别名。

在脚本内部使用"echo $0",或以其他方式获取argv [0]。


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如何在Python中获取__main__模块的文件名?


3
HP-UX是否有"which"命令?运行以下命令:
which abc

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

2

谢谢大家! 我想要的命令是“which”!现在我自己都感到惋惜,因为我已经知道这个命令了(在Ubuntu中)... 而且它在HP-UX中非常好用!

编辑:popcnt建议的“whereis”更加适合!非常感谢!


如果你认可我的回答,请点个赞。如果满意的话,你可以将其标记为问题的解答。这通常是SO上所看到的方式,而不是原始帖子的“答案”。 - popcnt

1

从命令行终端:

$ which abc

/opt/corp/xyz/abc


1

在Unix系统中获取脚本路径的正确方法是:

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

背景:$0是相对于当前目录的脚本文件名+路径。它可以是绝对路径(/...)或相对路径(../dir/...)。因此,$(dirname "$0")返回路径(不包括文件名)。注意引号;"$0"可能包含空格和其他奇怪的东西。

然后我们cd进入该目录,pwd将返回我们最终到达的绝对路径。

适用于kshbash

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

exec "$dir/"exe "$@"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接