В течение долгого времени 'набор портов FreeBSD', что означает программное обеспечение, доступное для него через его диспетчер пакетов, был больше и лучше, чем, что было в репозиториях Linux. Я предположил бы, что это не верно теперь, хотя я не знаю ни о какой статистике.
В Linux, UNIX и связанных операционных системах, .
обозначает текущий каталог. Так как Вы хотите петлять в своем текущем каталоге, и тот каталог не находится в Вашем $PATH
, Вам нужно ./
бит для сообщения оболочки, где исполняемый файл. Так, ./foo
средства выполняют названный исполняемый файл foo
это находится в этом каталоге.
Можно использовать type
или which
получить полный путь любых команд, найденных в Вашем $PATH
.
Литеральный ответ - поскольку другие дали: потому что текущий каталог не находится в Вашем $PATH
.
Но почему? Короче говоря, это для безопасности. Если Вы смотрите в чужом корневом каталоге (или/tmp) и вводите просто gcc
или ls
, Вы хотите знать о выполнении реального не злонамеренная версия друг шутника записал, который стирает все файлы. Другой пример был бы test
или [
, который мог бы переопределить те команды в сценариях оболочки, если Ваша оболочка не имеет их, как создано-ins.
Наличие .
поскольку последняя запись в Вашем пути немного более безопасна, но существуют другие нападения, которые используют это. Легкий должен использовать общие опечатки, как sl
или ls-l
. Или, найдите общую команду, которая, оказывается, не установлена в этой системе — vim
, например, так как системные администраторы имеют необычную вероятность для ввода этого.
Если Вы имеете в виду, почему Вам нужен./в запуске - поэтому (в отличие от этого, в Windows), текущий каталог не является частью Вашего пути по умолчанию. Если Вы работаете:
$ ls
Ваша оболочка ищет ls
в каталогах в Вашей переменной окружения PATH (echo $PATH
видеть его), и выполнения первый названный исполняемый файл ls
то, что это находит. Если Вы вводите:
$ a.out
оболочка сделает аналогично - но она, вероятно, не найдет исполняемый файл названным a.out. Необходимо сказать оболочку, где a.out - это это находится в текущем каталоге (.) затем, путь ./a.out
.
Если Вы спрашиваете, почему это называют "a.out", это - просто название выходного файла по умолчанию gcc. Можно изменить его с-o аргументом командной строки. Например:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
видеть это.)
– Simon Whitaker
30.11.2010, 10:37
<dir>/<file>
таким образом, как Вы в основном говорите, выполняют файл в текущем каталоге, который обозначается ./test
– Rohan Monga
30.11.2010, 10:37
<dir>/<file>
таким образом, как Вы в основном говорите, выполняют файл в текущем каталоге, который обозначается ./test
---------121 релиз 9 Linux (Сорокопут) ядро--------8293----Red Hat 2.4.20-8 на i686 [renjithg@cvsserver renjithg] $ касается .a.out; общее количество ls - lA 3-rw-rw-r - 1 renjithg renjithg 0 30 ноября 13:46 .a.out-rwxrwxr-x 1 renjithg renjithg 11669 30 ноября 13:46 a.out-rw-rw-r - 1 renjithg renjithg 218 24 августа 2009 aray.c [renjithg@cvsserver renjithg] $
– Renjith G
30.11.2010, 10:48
Можно попытаться добавить :.
к Вашей переменной $PATH.
Попытка ALT+F2 и тип: gksudo gedit /etc/environment
при выполнении Linux/GTK (это - то, что Вы имеете при использовании Ubuntu).
ОДНАКО я настоятельно рекомендую Вам НЕ делать это. Это плохо плохо плохой и плохой.
Вы знаете, такие вещи работа как это с 1970. Существует причина, почему текущий каталог не включен в $PATH.
.
текущий каталог
.something
был бы скрытый файл (Тип "ALT +", чтобы заставить их появиться в Наутилусе или попытке"ls -la
".
./someProgram.sh
то, что Вы вводите для ВЫПОЛНЕНИЯ исполняемого файла someProgram.sh в текущем каталоге.
.somethingElse
означал бы, что у Вас есть скрытый исполняемый файл в текущем каталоге, который является плохой идеей.
Я читаю руководства по Linux с 1999 года, и ни один из аргументов безопасности не имеет смысла. Настоящая причина в том, что Linux позволяет выполнять любой файл с любым расширением. Вся причина, по которой у вас есть расширения, заключается в том, чтобы избежать случайного нажатия на любой файл или вызова любого файла.
В Windows у вас есть exe, bats, на которые любой пользователь знает, что нельзя нажимать, если только он не поставил их туда сам или не написал программу. Задача решена. Тем не менее, теперь есть идиотское предупреждение о том, что вы используете exe. Хороший брандмауэр приложений допускает правила для запуска новых ненадежных приложений, а также определяет, в какие папки он может записывать данные.
Не знаю, откуда у большинства людей такое представление о безопасности.
alias
es, который может помешать, не просто$PATH
. – user2485710 15.10.2014, 00:35.
сначала затем это была бы проблема безопасности, Вы, или кто-то еще мог заменитьls
например (простой virus/trojen: сделайте zip-файл с исполняемым файлом названнымls
в нем, поскольку кто-то перерывает, они выполняют этот исполняемый файл, это …). Если это искало в.
в последний раз затем можно провести долгое время, сходя с ума не знающий, почему программа не работает (например, Вы делаете программу названной тестом, вместо того, чтобы запустить Вашу программу, это выполняет системную тестовую программу. Который не производит вывода). – ctrl-alt-delor 14.03.2015, 20:24export PATH="$PATH:."
для выполнения команды в текущем каталоге, если не найденный в другом месте в ПУТИ можно добавить это в .bashrc файле – jcubic 23.04.2017, 13:01