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.