Баш, всегда проверять $ 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.