Почему я должен набирать «./», если я хочу запустить приложение, скомпилированное GCC в Linux?

0

Моя ОС - Fedora Linux 14.

Я пишу программу с Code :: Blocks IDE, и она компилирует мою программу с GCC.

Моя программа вывода есть test. Когда я запускаю свое приложение в Code :: Blocks, оно запускается нормально. Но когда я дважды щелкаю свою исполняемую программу, она не запускается. Когда я запускаю терминал (по пути моей двоичной программы) и testпечатаю, моя программа не запускается, но когда я печатаю ./testв терминале, она запускается нормально. Почему я должен печатать, ./когда я хочу запустить приложение?

Амир Саниян
источник

Ответы:

8

./необходим, когда ваша PATHпеременная окружения не включает текущий каталог. Так что если у вас есть исполняемый файл в каком-то каталоге, который не находится на вашем пути, вам нужно ./theexecutableсообщить оболочке, что ваш исполняемый файл находится в текущем каталоге.

hvgotcodes
источник
2
Даже если .в пути , если /bin/есть прежде .в PATHэто не будет выполняться test. /bin/testсуществует (см. справочную страницу). Избегайте называть свою тестовую программу «test», чтобы избежать путаницы.
Маттео
Есть также веские причины, чтобы не указывать .в своем PATH.
dietbuddha
4

Просто потому, что текущий каталог ., как правило, не включен в переменную PATH.

Если вы не знаете, что печатать ./, вы можете добавить .список разделенных двоеточиями папок, содержащихся в PATH, однако это не рекомендуется, потому что было бы легко замаскировать системные команды, не осознавая этого.

stivlo
источник
Вместо того, чтобы добавлять «.», Я бы вместо этого добавил конкретный каталог, в котором скомпилированы ваши программы, например ~ amir / codeblocks / исполняемые файлы. (Я понятия не имею, является ли это правильным каталогом, но я надеюсь, что я понял идею.)
CarlF
1
Несколько хорошо добавить . в конце $ PATH. Тем не менее, не рекомендуется.
grawity
@grawity В конце не будет работать, в этом случае /bin/test/существует и будет выполняться вместо, ./testтак как /bin/будет раньше, чем текущий. Я не назвал бы мою тестовую программу test (обычная утилита unix)
Matteo
2

Когда вы просто набираете имя программы, * nix проверит все ваши местоположения PATH на наличие этого имени. Если он не найдет его, он не запустится. Поэтому вы должны ввести «./», чтобы указать текущий каталог.

обкрадывать
источник
0

В дополнение к тому, что говорят другие ответы:

Когда вы печатаете test, вы, вероятно, вызываете /bin/test; man testдля деталей.

Когда вы дважды щелкаете по исполняемому файлу (из nautilus или чего-то подобного, да?), Он, вероятно, запускается, но без терминала вы не видите вывод.

Кит Томпсон
источник