Лучше ли явно указывать полные пути к командам в сценарии оболочки?

X-графический сервер не запускался, если он не работал на текущем tty. (И то же самое для обычных наборщиков Wayland ). В некоторых случаях X-сервер переключает текущий tty по мере необходимости при запуске. В других требуется, чтобы текущий tty был правильно установлен перед его запуском. В настоящее время нет способа отложить запуск X-сервера до тех пор, пока вы сначала не переключитесь на tty7. Поэтому вы не можете одновременно запустить графический интерфейс на tty7 и загрузиться на tty1.

(В соответствии с этим, я иногда замечал, что запуск графики может завершиться ошибкой, если я использую ctrl+alt+Fx для переключения tty слишком рано,до завершения настройки ).

Обратите внимание, что при обновлении с Debian 7 до Debian 8 или Debian 9, которые по умолчанию используют systemd, графический интерфейс GNOME теперь будет запускаться на tty1 :-).

1
01.07.2020, 19:42
1 ответ

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

Вызов с использованием переменной окружения PATH

Вызов команд без указания их абсолютного пути. (IE, используя их существование в каталоге PATH), может сделать сценарий более переносимым. Возможно, это менее вероятно будет проблемой для программ в /bin, но определенно верно для любых команд, которые вы ожидаете увидеть в /usr/bin. Различные системы могут помещать их во всевозможные места, такие как /optили /snap.

Что еще хуже, пользователи могут настраивать свой путь по разным причинам. Это может включать такие вещи, как установка нескольких сред выполнения Java или версий Python. Таким образом, любой вызов javaпочти никогда не должен быть /usr/bin/java, потому что системный администратор мог установить версию, несовместимую с вашим скриптом. Разрешение пользователю выбирать, какую версию Java использовать, жизненно важно.

Другим примером этого является то, что некоторые дистрибутивы не обязательно следуют соглашениям, которых вы ожидаете. На самом деле Archlinux собрал все/bin/sbin/usr/bin/usr/sbinв один каталог с символическими ссылками на другие (, см. здесь ). Это должно быть обратно совместимым, но это демонстрирует, что некоторые стандарты не так вездесущи, как вы можете подумать.

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


Вызов с использованием абсолютного пути

Обычно вы используете абсолютный путь только тогда, когда у вас есть очень конкретная причина для этого.

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

Вы указали на вопрос безопасности. Есть способы, которыми это может быть полезно, но, как отмечено sudo, выполненные команды редко вызывают проблемы.

Вы упомянули cron-скрипты. Известно, что у cron есть проблема с переменной среды PATH, поскольку она не часто устанавливается так, как вы ожидаете (, см. здесь ). В прошлом я писал сценарии с абсолютными путями для использования с cron. Это было больше потому, что я не доверял администратору sys -при его установке. Я бы предпочел всегда запускать задания cron с хорошо настроенным PATH, а не с абсолютными путями в сценарии.

2
18.03.2021, 23:22

Теги

Похожие вопросы