環境変数PATHは実行可能コマンドの検索パスであるため、PATHを存在しない変数(たとえばexport PATH=blah
)に変更すると、コマンドは使用できなくなると思いました。
変更した後は、すべてのコマンドを使用できません(例:使用できませんls
)。ただし、明らかにまだ多くのコマンドを使用でき、引き続き使用しexport
て再度変更できます。
検索パスですべてのコマンドを実行できませんか?まだ利用可能なこれらのコマンドの実行可能ファイルはどこにありますか?歪んだ検索パスを引き続き使用できるのはなぜですか?
答え1
シェル内のコマンドである組み込みコマンドを実行し続けることができるため、実行可能ファイルのサポートは必要ありません。
たとえば、シェルがある場合は、次のようになりますbash
。 https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
シェルの内部に影響を与えるいくつかのコマンド(cd
例exec
:)exit
は、期待どおりに機能しないか、まったく機能しないため、外部バイナリでは提供できません。
答え2
あなたのシェルがbash
、シェル組み込み関数、シェルキーワード、シェル組み込み関数などのシェル別名がたくさんあるとします。
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