Запустите бинарный с ./ в Ubuntu - PullRequest
3 голосов
/ 04 ноября 2008

Я решил выучить C ++ (я программирую на C на работе), и я читал некоторые учебные пособия (и множество постов здесь о переполнении стека). Итак, я набрал стандартное C ++ «привет слово», скомпилированное с GCC на моей Ubuntu машине как «test».

Затем я попытался запустить его, набрав «test» и нажав Enter. Ничего такого. Оказывается, я должен запустить его с "./test". Хорошо, хорошо, я сделаю это с этого момента. Но почему? «./» просто говорит о том, что я должен выполнить, находится в текущем каталоге ... Не является ли текущий каталог не всегда частью PATH, когда OS ищет что-то для запуска? Могу ли я сделать это так?

Ответы [ 7 ]

10 голосов
/ 04 ноября 2008

Да, текущий каталог не является частью вашего PATH. Вы не хотите, чтобы это было, потому что тогда вы могли бы оказаться в каталоге, в котором была запущена вредоносная программа, о которой вы не знали.

Что делать, если вы привыкли запускать / usr / bin / grep, но вы оказались в каталоге, в который злоумышленник поместил вредоносную копию grep, и на этот раз вы запустили grep и запустили grep вне текущего каталога, а не /usr/bin/grep.

Вы, конечно, можете добавить ./ к вашему PATH в вашем ~ / .profile или ~ / .bash_profile, но я не рекомендую это.

И если вам от этого станет легче, у меня было то же разочарование 15 лет назад, когда я начал использовать Unix-подобные системы.

6 голосов
/ 04 ноября 2008

Вы можете добавить "." к вашему PATH, но это не поможет вам в этом случае - «test» - встроенная оболочка.

3 голосов
/ 04 ноября 2008

К сожалению, есть команда Unix, которая называется "test" ...

1 голос
/ 04 ноября 2008

Даже если текущий каталог находится в самом начале $ PATH, 'test' все равно не будет запускать его на (большинстве?) Оболочек, поскольку 'test' - встроенная команда оболочки.

1 голос
/ 04 ноября 2008

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

0 голосов
/ 04 ноября 2008

В случае, если неясно, в этом аспект Windows отличается от Unix / Linux. В Windows текущий каталог неявно находится в пути.

0 голосов
/ 04 ноября 2008

Не имея «.» (текущий каталог) в PATH является второстепенной мерой безопасности. Вы всегда можете добавить это, если хотите, хотя это не лучшая практика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...