如何find当前进程/可执行文件正在运行的path?

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

说,我试图运行一个可执行文件'abc'。 现在服务器可能提供了'abc'的别名。我怎样才能知道这个path? 因为如果我调用'abc',它可能实际上从/ opt / corp / xyz / abc运行它。如何从我调用可执行文件的path中知道?

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

which abc ”来显示你将会打电话给哪个abc

或“ alias ”列出别名

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

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

  $其中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 

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

 $别名abc

取决于你的系统配置方式,上面的命令应该为你的问题的多种变化提供答案。

在Perl中:

 $running_script = $0; 

从Python,请参阅SO 如何在Python中获取__main__模块的文件名?

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

 which abc 

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

谢谢大家! “那是我以后的任务! 因为我已经知道命令(在Ubuntu中),所以我现在正在面临自己的问题。它在HP-UX中的确如同魅力一般!

编辑:popcnt建议'whereis'更合适! 感谢很多人!

从命令行终端:

$其中abc

/选择/ CORP / XYZ / ABC

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

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

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

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

适用于kshbash

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

 exec "$dir/"exe "$@"