linux - 我上次 Linux 期中考试的 PATH 问题,我需要有人解释一下

标签 linux path

如果/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/

相关文章:

linux - 在 docker windows 上运行 linux 容器

linux - 读取用户拥有的文件的权限被拒绝

drupal - 在 Drupal 6 中以编程方式更新节点路径的正确方法

eclipse中的java文件相对路径

debugging - 为什么 Juno 调试器尝试在某个随机目录中搜索文件?

macos - 如何从目录 : macOS zsh 中删除或修剪 $PATH 变量的一部分

c++ - 没有动画框架的Qt动画

linux - 如何在 Linux 上获取连接到 gpu 的显示器数量?

c - 使用 shmctl() 销毁共享内存段 (Linux)

path - 如何将代码 objective-c 转换为 Swift 以保存图像?