В подобных UNIX системах за эти годы (наиболее соответствующим образом мне, Linux), я заметил это .
(текущий dir), никогда не находится в $PATH
по умолчанию. Почему это?
Я вспоминаю чтение несколько лет назад, что это была проблема безопасности, но статья, которую я прочитал, не объяснила, какова точно проблема была. Это, потому что кто-то мог оставить злонамеренную версию ls
или cp
в каталоге, и я закончил бы тем, что выполнил его, не понимая, что это было там?
Вы ответили правильно на свой собственный вопрос, это точно, почему точка не находится в пути:
Защищать от ребяческих вирусов или честных ошибок.
Конечно, это - очень хромая и бесполезная антивирусная мера, и ничто не мешает Вам добавить точку к пути самим.
Да. Если бы Вы помещаете "." в путь, Вы закончили бы тем, что отправили, большая команда звонит в файлы в Вашем текущем каталоге.
Даже если это было последним, существует все еще ошибка пилота. Например, Солярис 10 испытывает недостаток в "вершине". Я ввожу "вершину" в своей системе целый день, потому что я думаю, что нахожусь в системе, которая имеет "вершину".
Извините, я хотел бы спросить это в форме комментария к выбранному ответу, но у меня еще нет представителя на суперпользователе.
Ответ безопасности имеет смысл, но если Вы помещаете "." в свой ПУТЬ как последняя вещь, разве оболочка не должна смотреть в текущем каталоге в последний раз, поскольку это ищет исполняемые файлы, и таким образом уменьшите угрозу безопасности? Если бы это действительно искало $PATH в порядке, то это нашло бы/bin/ls, прежде чем это нашло./ls.
Так, насколько небезопасный это, чтобы я поместил "." в конце своей переменной среды $PATH?
Это работает, как я предполагаю. Вот то, как я протестировал:
Во-первых, добавьте "." в конец своей переменной окружения PATH.
Затем поместите следующий файл в некоторый каталог, такой как ~/dir1/dir2/test_which.rb:
#!/your/path/to/ruby
puts "this file is from the current directory"
И помещенный этот файл в/usr/bin/test_which.rb
#!/your/path/to/ruby
puts "this file is at /usr/bin/test_which.rb"
Убедитесь chmod +x файлы так, чтобы они были исполняемым файлом.
Теперь, если Вы измените каталог на ~/dir1/dir2 и выполните test_which.rb, то Вы получите вывод
this file is at /usr/bin/test_which.rb
Действительно, если Вы работаете, "о каком test_which.rb" отовсюду, должно сообщить это
/usr/bin/test_which.rb
Можно все еще выполнить файл в текущем каталоге путем ввода:
./test_which.rb