Відповіді:
У Linux, UNIX та пов'язаних з ними операційних системах .
позначає поточний каталог. Оскільки ви хочете запустити файл у вашому поточному каталозі, а цей каталог не знаходиться у вашому $PATH
, вам потрібно, щоб ./
біт повідомив оболонці, де знаходиться виконуваний файл. Отже, ./foo
означає запустити виконуваний файл, який називається foo
у цьому каталозі.
Ви можете використовувати type
або which
отримати повний шлях будь-яких команд, знайдених у вашому $PATH
.
alias
ес, які можуть перешкоджати не тільки $PATH
.
.
спочатку, це було б проблемою безпеки, ви або хтось інший можете замінити, ls
наприклад (простий вірус / trojen: зробити zip-файл із виконуваним ім’ям, названим ls
у ньому, як хтось шукає , вони виконують цей виконуваний файл, що…). Якщо він шукав в .
останньому, то ви можете витратити довгий час без розуму, не знаючи, чому ваша програма не працює (наприклад, ви робите програму під назвою тест, замість того, щоб запускати програму, вона запускає програму тестування систем. Що не дає результатів).
export PATH="$PATH:."
команду для виконання в поточному каталозі, якщо її не знайти в іншому місці в PATH, ви можете додати це у свій .bashrc файл
Буквальна відповідь така, як давали інші: тому що поточний каталог не у вашому $PATH
.
Але чому? Словом, це для безпеки. Якщо ви шукаєте в чужому домашньому каталозі (або / tmp) і вводите просто gcc
або ls
, ви хочете знати, що ви працюєте зі справжньою, а не злісною версією, яку написав ваш друг пранкер, який видаляє всі ваші файли. Іншим прикладом може бути test
або [
, що може змінити ці команди в скриптах оболонки, якщо у вашій оболонці немає таких як вбудовані.
Маючи в .
якості останньої записи в вашому шляху трохи безпечніше, але є й інші атаки , які використовують це. Найпростішим є використання поширених помилок, як-от sl
або ls-l
. Або знайдіть загальну команду, яка не встановлена в цій системі - vim
наприклад, оскільки системні адміністратори мають надмірну ймовірність ввести це.
PATH
змінному середовищі.
Якщо ви маєте на увазі, навіщо вам ./ на початку - це тому, що (на відміну від 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
переконатися в цьому.)
<dir>/<file>
так що ви в основному говорите виконати файл у поточному каталозі, який позначається./test
Ви можете спробувати додати :.
до змінної $ PATH.
Спробуйте ALT + F2 і введіть: gksudo gedit /etc/environment
якщо працює Linux / GTK (це те, що ви маєте, якщо використовуєте Ubuntu).
ЯКЩО я настійно раджу НЕ робити цього. Це погано погано погано і погано.
Ви знаєте, такі речі працюють так з 1970 року. Є причина, чому поточний каталог не включений до $ PATH.
.
- поточний каталог
.something
буде прихованим файлом (введіть "ALT +", щоб вони з'явилися в Nautilus, або спробуйте " ls -la
".
./someProgram.sh
це те, що ви вводите RUN виконуваного файлу someProgram.sh у поточному каталозі.
.somethingElse
означатиме, що у вас є прихований виконуваний файл у поточному каталозі, що є поганою ідеєю.
./command_name
для виконання команди в Linux?"