如果/bin/foo
是一个输出 hi 和 /usr/bin/foo
的程序是一个输出 hello 的程序,这三个命令序列在屏幕上的输出是什么:
PATH=/bin/foo:/usr/bin/foo:/usr ; cd /bin ; foo
答案应该是嗨
最佳答案
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
中,在这种情况下,无论如何都会搜索它)。
关于linux - 我上次 Linux 期中考试的 PATH 问题,我需要有人解释一下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59222115/