Изменена ли переменная среды $ 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 .

  • «Grep-ing» от A до B в выводе hexdump
  • Инкрементная арифметика Sed
  • Команда Scrot - как сохранить только миниатюру
  • Автоматический вход по устройству с последующим логином пользователя?
  • awk и новые строки во входных данных
  • Соответствие POSIX программы cd?
  • Назначить имена столбцов diff -y
  • определять оболочку в скрипте во время выполнения
  • Перенесите stderr и stdout в / dev / null с помощью / bin / sh
  • Загрузите и установите последний пакет deb из github через терминал
  • Bash не может видеть обновление PATH
  • Interesting Posts

    Как извлечь конкретный текст из файла журнала с помощью linux-терминала?

    Использование инструкции If в Crontab для создания оповещения

    Control-C запускает выход из корня в bash

    Проблема с символом ncmpcpp

    Как я могу заставить `time` использовать тот же формат, когда присутствует stdin?

    Использование групп Linux для балансировки производительности ЦП

    Как вы узнали, что находитесь на последней строке при переходе через файл?

    Можно ли сравнить параметр сценария с массивом переменных и обработать его?

    Как реплицировать установленный пакет из одного экземпляра Fedora в другой?

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

    Как узнать, является ли раздел ext2, ext3 или ext4?

    RHEL6: системный шрифт по умолчанию

    специальные каталоги rsync

    Как распечатать текущие ключевые слова в Linux / Debian?

    Как создать учетную запись привязки LDAP в Centos / RedHat, которая позволяет мне искать по ldapbind@server.com

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