Изменена ли переменная среды $ SHELL только для интерактивных оболочек?

Я вижу два возможных варианта использования переменной окружения SHELL :

  • Его можно использовать для указания интерактивной оболочки, которую пользователь хочет использовать, и / или
  • он может использоваться процессами для выполнения других команд с заменой команды в обычном /bin/sh -c "..." idiom.

Если он использовался только для первого, это может быть что-то очень странное (например, ipython ), если оно также будет использоваться для последнего, оно должно обеспечить базовую форму совместимости POSIX, например, понять параметр -c и сохранить окружающей среды ( что удивительно сложно ).

Стандарт POSIX здесь не очень явчен, он просто пишет.

Эта переменная должна указывать путь к предпочтительному интерпретатору языка команд. Если этот интерпретатор не соответствует командному команду оболочки в томе «Шлюз и служебные программы» IEEE Std 1003.1-2001, глава 2 «Язык команд командной оболочки», утилиты могут отличаться от описанных в IEEE Std 1003.1-2001.

Является ли второе использование действительно общим и / или действительным, и, следовательно, что-то беспокоит, если я установлю SHELL на что-то странное?

One Solution collect form web for “Изменена ли переменная среды $ SHELL только для интерактивных оболочек?”

Ни один из API-интерфейсов POSIX C явно не использует переменную среды SHELL . system функция и функция popen должны вызывать программу sh . Несколько утилит (например, ex , mailx , …) должны использовать $SHELL , но всегда выполнять пользовательский код; явно игнорирует $SHELL .

Раздел переменных среды позволяет утилитам , но не C API («системные интерфейсы») иметь другое поведение, если $SHELL не соответствует POSIX sh.

На практике SHELL устанавливается в пользовательскую оболочку входа, которая может быть или не быть совместимой с POSIX. Zsh и рыба являются популярными альтернативами. Я использую zsh в течение десятилетия по различным вариантам Unix, и я не помню, чтобы какая-либо системная утилита не срабатывала. Я видел случайный небрежно написанный код, вызывающий $SHELL вместо sh для выполнения sh скриптов. Это довольно редко, и вам не нужно мешать устанавливать SHELL в любое SHELL для вас время.

Короче говоря, да, SHELL – ваша любимая интерактивная оболочка, и приложения не получают никакой гарантии того, какой синтаксис она принимает, или даже принимает ли она параметр -c .

  • Сделать скрипт командной строки выполнять команды в telnet или программах
  • Как сделать временный файл в ОЗУ?
  • Нужна команда для отображения эха «успех»
  • поместите строки чисел в столбец со сценарием оболочки
  • Как использовать grep для поиска строк, начинающихся с определенного символа в bash
  • Создание переменной с sed в ksh
  • Есть ли оболочка JavaScript?
  • Может ли оболочка предупредить меня, если программа ждет стандартного ввода?
  • Передача аргументов в оболочку su-provided
  • find -exec exit 1 \; Не работает и не находит -exec sh -c exit 1 \;
  • когда использовать двойные кавычки с переменной в сценарии оболочки?
  • Interesting Posts

    Как узнать, является ли диск SSD или HDD

    Как я могу заняться 400% процессором на 2 ядрах

    Могу ли я загрузить или загрузить файл, используя CURL для файла: ///// my_windows / test (не-http-ссылка)

    Конфигурация Dual Head с двумя сенсорными экранами в Linux

    загрузка остановилась на « Графическом интерфейсе целевого графического интерфейса» после удаления драйверов NVidia

    Ввод в терминал подчеркивает символы, добавляет символы с акцентом

    правильные разрешения в корне HTTP с помощью Apache2 + FastCGI + Suexec

    systemd: Как проверить запланированное время отложенного выключения?

    Линукс systemd выключение прерывания, если служба активна

    Немедленно введите последний каталог, который вы переименовали

    Форматировать образцы sar в реальном времени с помощью пасты и awk

    Настройка основного экрана в середине настройки с тремя мониторами

    Удаленная команда в файле конфигурации ssh

    Использовать вывод cat или grep как вход в sed

    Выполнять скрипты bash при вводе каталога

    Linux и Unix - лучшая ОС в мире.