Ответ 1
Когда вы вводите имя команды (a.out
ничем не отличается от любого другого имени команды в этом отношении), оболочка ищет исполняемый файл с этим именем. Он выполняет этот поиск, используя список имен каталогов, хранящихся в переменной среды $PATH
.
Вы можете увидеть свой текущий $PATH
, набрав
echo $PATH
в командной строке. Типичным значением может быть что-то вроде
/usr/bin:/bin
хотя у вас, вероятно, будут и дополнительные каталоги.
Поскольку a.out
находится в вашем текущем рабочем каталоге (введите pwd
, чтобы увидеть, что это за каталог), а вашего текущего рабочего каталога, вероятно, нет в вашем $PATH
, вы не можете выполнить его, просто набрав a.out
.
Поскольку вы можете ссылаться на свой текущий каталог как .
, вы можете (и должны) выполнить команду, набрав
./a.out
ПРИМЕЧАНИЕ: у вас может быть .
в вашем $PATH
, но это считается плохой идеей, так как делает слишком случайным выполнение случайных команд. Если .
находится в передней части вашего $PATH
, представьте, что я прошу вас cd
в мой каталог и введите ls
- но я установил файл с именем ls
, который делает что-то неприятное. Помещение .
в конце вашего $PATH
снижает этот риск, но не устраняет его полностью. Лучше всего выработать привычку добавлять имя файла к ./
, если вы хотите выполнить его из текущего каталога.
(Я проигнорировал тот факт, что псевдонимы, функции и встроенные команды оболочки также могут выполняться таким образом.)