Я только что перешел с Windows на Ubuntu 11.10.
Я написал следующий код на C с помощью текстового редактора и сохранил его как HelloWorld.c в Documents.
#include <stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
И я запустил Терминал и ввел следующие команды:
cd Documents
gcc HelloWorld.c
Файл с именем a.out, который после некоторого поиска в Google является исполняемым. Я ввел эту команду:
a.out
Но я получаю
a.out: command not found
Какой шаг я сделал неправильно?
Когда вы запускаете команды в Linux, он ищет все каталоги, перечисленные в переменной среды PATH
, и если он не находит там команду, вы получаете сообщение, которое вы видели.
Обычно это выглядит так:
PATH=/usr/local/bin:/usr/bin:/bin
Это означает, что он будет выглядеть первым в /usr/local/bin
. Если он не найдет его там, он будет выглядеть в /usr/bin
и т. Д.
На самом деле, это очень похоже на DOS / Windows: есть переменная %PATH%
, которая делает то же самое.
Разница заключается в том, что в Windows текущий каталог также ищется. Unix считает это плохим, потому что локальный файл (например, вредоносное ПО) может случайно переопределить важные системные программы.
Однако, если вы предпочитаете это, вы можете заставить Linux работать таким же образом, добавив .
к пути:
PATH=.:$PATH
(То есть установите PATH
в .:
плюс существующее содержимое из $PATH
.)
В конечном итоге это выглядит примерно так (на вашей машине это может отличаться):
PATH=.:/usr/local/bin:/usr/bin:/bin
Если вы не хотите этого делать, вы можете просто Запустите каждую программу, указав каталог явно:
./myprog
или
/home/username/myprog
По существу a.out создается по умолчанию, потому что Вы не указывали название исполняемого файла. Попробуйте это вместо этого:
gcc HelloWorld.c -o HelloWorld
После того как Вы делаете это, необходимо смочь вызвать его (как предложенный Sunil) снабжающий "HelloWorld" предисловием с точечной наклонной чертой (./):
./HelloWorld
Вот ссылка на статью, которая объясняет немного о том, почему a.out создается: Запись и Компиляция C Программы на Linux.
Поскольку вы запускаете исполняемый файл в текущем рабочем каталоге, вы должны поставить перед ним префикс ./
. Так что для вашей программы запустите ее как ./a.out
.
Терминал ищет исполняемые файлы в $PATH
. Это переменная среды Unix , в которой перечислены каталоги, содержащие системные двоичные файлы (такие как ls
, echo
или gcc
). Если вы вызываете исполняемый файл , а не в каталоге $PATH
(например, a.out
), вам необходимо указать его абсолютный путь в файловой системе.
В терминале .
есть синоним текущего рабочего каталога, таким образом ./a.out
. С таким же успехом вы можете позвонить /home/yihang/Documents/a.out
.