Bash, завжди перевіряйте $ PWD як частину шляху?


15

Передумови: Один з моїх колег, який не походить з Linux, запитав мене про використання ./перед деякими командами, а не за іншими, тому я пояснив йому, як PATHпрацює і як бінарні файли обираються для запуску. Його відповідь полягала в тому, що це було німим, і він просто хотів не набирати ./команди перед командами.

Питання: Чи є спосіб легко змінити поведінку оболонки таким, який $PWDзавжди є першим пунктом PATH?


Дурне це може бути (а може і не бути), але в кожному середовищі є свої химерності, і це типовий химерний оболонку Unix.
РонДжон

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.