Поскольку в Unix обычно текущий каталог не находится в $PATH
.
При вводе команды оболочка просматривает список каталогов, как указано в переменной PATH
. Текущий каталог отсутствует в этом списке.
Причина отсутствия текущего каталога в этом списке - безопасность.
Допустим, вы являетесь пользователем root и зайдите в каталог другого пользователя и наберите sl
вместо ls
. Если текущий каталог находится в PATH
, оболочка попытается выполнить программу sl
в этом каталоге (поскольку другой программы sl
нет). Эта sl
программа может быть вредоносной.
Он работает с ./
, поскольку POSIX указывает , что имя команды, содержащее /
, будет использоваться непосредственно в качестве имени файла, подавляя поиск в $PATH
. Вы могли бы использовать полный путь для того же эффекта, но ./
короче и проще для написания.
EDIT
Эта часть sl
была просто примером. Каталоги в PATH
ищутся последовательно, и при совпадении эта программа выполняется. Таким образом, в зависимости от того, как выглядит PATH
, ввода обычной команды может быть, а может и не хватить для запуска программы в текущем каталоге.