Баш, всегда проверять $ PWD как часть пути?


15

Предыстория: Один из моих коллег, не имеющий опыта работы в Linux, спросил меня об использовании ./ранее одних команд, а не других, поэтому я объяснил ему, как PATHработает и как выбираются двоичные файлы для запуска. Он ответил, что это глупо, и ему просто не нужно было печатать ./перед командами.

Вопрос: есть ли способ легко изменить поведение оболочки, чтобы $PWDвсегда был первый элемент PATH?


Это может быть (или не быть) глупо, но в каждой среде есть свои причуды, и это типичная причудливость оболочки Unix.
RonJohn

12
Это мера безопасности. Оболочки обычно делали это по умолчанию (вспомните 1970-е годы), и многопользовательские системы были широко атакованы из-за этого.
Чарльз Даффи

3
Он ответил, что это было глупо : сказал, что коллега должен обучить себя по этой теме. Этот неожиданный ответ демонстрирует ответ в стиле PHB : нет понимания или оценки базовой системы.
Облако,

2
Почему бы просто не уронить двоичные файлы ~/binи не сделать их частью PATH? Это тоже держит вещи в порядке.
Сергей Колодяжный,

3
@Ziazis в Windows, текущий каталог считается независимо от того, является ли он частью PATH(что является обычным источником таких соображений).
Стивен Китт,

Ответы:


55

Если вы действительно хотите, вы можете сделать это, добавив .к своему пути:

export PATH=".:$PATH"

Однако это плохая идея, потому что это означает, что ваша оболочка выберет любую команду в текущем каталоге в предпочтении других. Если кто-то (или какая-либо программа) удалит вредоносную lsкоманду в каталог, которым вы часто пользуетесь, у вас возникнут проблемы ...


13
Это отличный момент, хотя, возможно, этого было бы достаточно, чтобы переместить. в конец пути, затем экспортируйте PATH = "$ PATH :."
Кристоф

12
На самом деле я помню, что .в начале у вас PATHбыло по умолчанию для обычных пользователей (если я создал пользователя с «sam» в HP-UX, по крайней мере, я не уверен насчет старой SunOS). Позже это значение по умолчанию было удалено из соображений безопасности. Если у вас есть .последний пункт PATH, все же кто-то может надеяться на типичные опечатки.
Филиппос

6
@Philippos, да, как печально известные /tmp/slшутки, предназначенные для пользователей с такими PATH. В Debian и его производных установите slпакет, чтобы понять, как часто вы печатаете slвместо него ls.
Стефан

Нет, это не плохая идея, это хорошая идея, особенно если вы разработчик. Конечно, сохранение среды, где никто не бросает вредоносные команды, является еще одной хорошей идеей.
jamesqf

4
@jamesqf, на самом деле, это хорошая идея печатать, ./когда вы хотите вызывать команды в текущем каталоге. Или, если ваш обычный каталог тока /project/under/development/bin, а затем добавить , что к вашему PATH. Это решает ваш вариант использования разработчиком. Помещение .в начало вашей PATH- плохая идея, точка.
Wildcard

14

Хотя это не является прямым ответом на ваш вопрос, рекомендуется создать binкаталог в вашем домашнем каталоге следующим образом /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Поместите туда свои личные сценарии. Они PATHбудут проходить в том порядке, в котором вы их определили и выполняли ваши личные сценарии без .необходимости.


0

Вам нужно иметь. в начале вашей переменной PATH:

export PATH=".:$PATH"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.