Не забывайте про префикс ./ в Linux

Недавно я совершил глупейшую ошибку, работая в Linux. Я написал небольшую программу, скомпилировал ее и отчаянно пытался запустить через терминал. Исполняемый файл назывался «main». В терминале я зашел в каталог с этим файлом и наивно набрал команду:

$ main

Какого же было мое удивление, когда в ответ я получил сообщение о том, что «Команда ‘main’ не найдена…». Как так? Я все проверил еще раз: в терминале мы находились в нужном каталоге, нужный файл там есть, наименование правильное. Но почему тогда Linux его не «видит»?

Я, как водится в таких случаях, полез в Интернет и быстро понял свою ошибку. Дело в том, что Linux мыслит иначе, чем Windows. Я привык к тому, что операционная система всегда заглядывает в текущий каталог в поиске нужного файла. Но Linux при поиске исполняемых файлов ведет себя иначе. Он обращается к переменной окружения PATH. В ней перечислены каталоги, в которых Linux ищет файл, к которому вы обращаетесь. Для того, чтобы просмотреть значение этой переменной наберите в терминале:

$ echo $PATH

Каталоги разделяются двоеточием (на вашей системе может быть другой разделитель). Порядок каталогов соответствует тому порядку, в котором Linux их просматривает. Найдя файл с указанным именем, он запускает его и в другие каталоги даже не заглядывает. Если ни в одном из этих каталогов файл не найден, то выдается сообщение об ошибке. При этом текущий каталог не просматривается.

Для того чтобы изменить такое поведение нужно использовать префикс «./». То есть запуск моей программы должен выглядеть так:

$ ./main

Теперь программа нормально запускается. Учтите что при использовании префикса «./» Linux просматривает только текущий каталог. В каталоги, указанные в переменной PATH, он даже не заглядывает.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *