我在连接到本地unix服务器盒时运行了一些可执行文件。
说,我正在尝试运行可执行文件'abc'。现在服务器可能为'abc'提供了别名。我如何知道这条路径?就像在,如果我调用'abc',它实际上可以从/ opt / corp / xyz / abc运行它。我如何知道我正在调用可执行文件的路径?
顺便说一句,我在HP-UX上运行:D
答案 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
将返回我们结束的绝对路径。
适用于ksh
和bash
。
在C程序中,您应该检查argv[0]
。我不确定shell是否会将完整路径放在那里。如果您遇到问题,我建议您将可执行文件包装在一个准备环境的小脚本中,然后使用以下命令调用您的可执行文件:
exec "$dir/"exe "$@"