为什么我可以将 PATH 更改为乱码并仍然使用命令?

为什么我可以将 PATH 更改为乱码并仍然使用命令?

环境变量 PATH 是可执行命令的搜索路径,因此我认为将 PATH 更改为不存在的内容(例如,export PATH=blah)将使我无法使用任何命令。

更改后,它不允许我使用所有命令(例如我不能使用ls)。但显然,我仍然可以使用许多命令,并且我仍然可以使用export它并将其更改回来。

所有命令不都是搜索路径中的可执行文件吗?这些仍然可用的命令的可执行文件位于哪里?当我的搜索路径是乱码时,为什么我仍然可以使用它们?

答案1

您仍然可以运行内置命令,即 shell 内部的命令,因此不需要由可执行文件支持。

例如,如果您的 shell 是bash,您可以查看: https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html

请注意,某些在内部影响 shell 的命令(cd例如exec、 )exit无法由外部二进制文件提供,因为它们无法按预期工作(甚至根本无法工作)。

答案2

假设你的 shell 是bash,有很多 shell 内置函数、shell 关键字、shell 别名,例如 shell 内置函数:

alias, bg, bind, break, builtin, case, cd, command, compgen, complete, continue, declare, dirs, disown, echo, enable, eval, exec, exit, export, fc, fg, getopts, hash, help, history, if, jobs, kill, let, local, logout, popd, printf, pushd, pwd, read, readonly, return, set, shift, shopt, source, suspend, test, times, trap, type, typeset, ulimit, umask, unalias, unset, until, wait, while

以下仍然有效:

echo "Hello, world!'

cd /opt

printf '%s\n' /home/user/*

exit

相关内容