Назад | Перейти на главную страницу

Запуск сценария оболочки в * nix

Немного новичка, использующего * nix (на самом деле я использую оболочку bash в OS X 10.5), и мне стало интересно, какой, вероятно, очень простой ответ на это ...

Когда я пишу сценарий (называемый, скажем, my_script) и сохраняю его в текущем каталоге, почему мне нужно ставить точку и косую черту перед его именем, чтобы запустить его? Как это:

./my_script

Разве оболочка не может сказать, что я хочу запустить ее из текущего каталога? Windows, кажется, справляется с этой ситуацией.

Ура Бен

Текущий каталог автоматически не входит в путь выполнения. Это отчасти история, отчасти мера безопасности.

Unix разработан как многопользовательская система. Если ваш рабочий каталог в настоящее время находился в какой-то папке, совместно используемой многими пользователями системы, и ваш текущий каталог автоматически находился в пути выполнения до системных каталогов, то при запуске standard_system_command вы можете получить что-то злое, что кто-то из других пользователей оставил в этой общей папке вместо стандартной системной команды.

Windows не начинала свою жизнь как многопользовательская система, поэтому командная строка имеет другое поведение по умолчанию.

На мой взгляд ты не должна включить ./ в свой путь. Если вы создали сценарий, который регулярно запускаете, вам следует поместить его в общую папку, например / usr / local / bin, или в личную папку, например ~ / bin, которую вы добавляете в PATH. Вы также можете поместить символическую ссылку в одну из этих папок или создать псевдоним.

«Разве оболочка не может сказать, что я хочу запустить ее из текущего каталога? Windows, кажется, справляется с этой ситуацией».

Если вы добавили. в вашу переменную PATH, но это плохая идея с точки зрения безопасности. Представьте, что взломщик создал файл с именем «ls» и целую кучу больших файлов в вашем каталоге / tmp. Вы пытаетесь выяснить, почему / tmp заполнен, поэтому вы набираете cd / tmp; ls. Теперь ls работает с вашим уровнем привилегий (возможно, с правами root) и может установить любой эксплойт, который захочет ... вероятно, без вашего ведома, потому что взломщик был достаточно умен, чтобы передать все в> / dev / null, а затем запустить ls в конце с параметрами командной строки.

По умолчанию текущий каталог не добавляется к вашему пути автоматически. Текущий каталог обозначен символом '.' (точно так же, как каталог вверх - это '..') Можете добавить '.' на свой путь, но это не рекомендуется.

Следовательно, './my_script' говорит: запустите сценарий 'my_script', который находится в текущем каталоге.

./ указывает ему сначала искать в текущем каталоге, а не в другом пути. Вы можете изменить путь в файле .profile для своего имени пользователя с инструкциями. Вот.