9

Я использую Ubuntu и замечаю, что многие из моих исполняемых скриптов не будут работать, если я не предшествую теме ./ .

Например, если у меня есть скрипт на Perl: /home/me/script.pl и я в данный момент нахожусь в /home/me , то набрав script.pl этого не сделаю, а ./script.pl .

Это почему?

4 ответа4

21

Потому что текущий каталог не в вашем пути. Это функция безопасности. Если бы он был у вас на пути, кто-то мог бы потенциально отбросить вредоносную копию обычной команды, и, например, когда вы находитесь в этом каталоге, вместо того, чтобы запускать настоящий sudo, вы запускаете поддельную. Это было бы плохо.

13

Чтобы выполнить сценарий, вам необходимо ввести полный путь к сценарию, если сценарий не присутствует в одном из каталогов, перечисленных в переменной среды $PATH . Вообще (и по умолчанию) . (текущий каталог) отсутствует в вашем $PATH , поэтому вам нужно набрать ./script для его выполнения.

4
echo $PATH

У вас должен быть текущий каталог (одна точка) в вашем пути, чтобы это работало.

Вы можете добавить его к своему пути, если хотите, с помощью следующих команд.

sh/bash:export PATH=$PATH:.

tcsh/csh:set PATH = ($PATH .)

3

оболочка ищет пути для исполняемых файлов и по умолчанию ./ не находится в пути.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .