【问题标题】:PATH question on my last linux midterm that I need someone to explain [closed]我上一个 linux 期中考试的 PATH 问题,我需要有人解释 [关闭]
【发布时间】:2019-12-07 00:59:09
【问题描述】:

如果 /bin/foo 是一个输出 hi 的程序,/usr/bin/foo 是一个输出 hello 的程序,这三个命令序列在屏幕上的输出是什么:

PATH=/bin/foo:/usr/bin/foo:/usr ; cd /bin ; foo

答案应该是嗨

【问题讨论】:

标签: linux path


【解决方案1】:

PATH 的内容应该是一个 ':' 分隔的目录列表,而不是直接指向可执行文件的路径。根据问题的其余部分,我假设命令序列是 PATH=/bin:/usr/bin:/usr ; cd /bin ; foo 而不是 PATH=/bin/foo:/usr/bin/foo:/usr ; cd /bin ; foo

如果是这样,由于PATH 中目录的顺序,输出将是“hi”。

当命令foo 执行时,系统会检查PATH 变量中的每个目录以查找具有该名称的可执行文件,并执行它找到的第一个。由于按顺序排列的目录是;

/bin
/usr/bin
/usr

它将寻找的可执行文件是

/bin/foo
/usr/bin/foo
/usr/foo

根据您的描述,我们知道/bin/foo 是一个输出“hi”的程序,因此它查找的第一个可执行文件被找到、运行并输出“hi”。

cd /bin 有点像红鲱鱼,因为在尝试将命令解析为可执行文件时不会搜索工作目录(除非它恰好位于 PATH 中,在这种情况下它会无论如何都被搜索过)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多