Рейтинг:0

проверка оболочки входа в систему не работает в .profile

флаг vn

Ubuntu 20.04, 5.8.0-63-универсальная, оболочка gnome, gdm3

Моя оболочка входа установлена ​​в /bin/sh

и у меня есть эта строка в моем $HOME/.профиль файл:

shopt -q login_shell > /dev/null 2>&1 || экспорт SHELL=/bin/zsh

Теперь из моего понимания экспорт SHELL=/bin/zsh не должен выполняться при входе в систему, верно? потому что это оболочка входа в систему, поэтому shopt -q login_shell > /dev/null 2>&1 правда.

Но я получаю $SHELL как /bin/zsh после входа в систему.

На самом деле настройка $SHELL не моя забота, я хочу использовать shopt -q login_shell > /dev/null 2>&1 в логике .zshrc. Мне нужно, чтобы это работало для выборочного запуска вещей в оболочке без входа в систему.

Не могу понять, что происходит. Нужна помощь!

Редактировать:

Shopt не является командой /bin/sh. Но даже изменение оболочки входа в систему на /bin/bash не помогает.

Рейтинг:1
флаг hr

магазин недопустимая команда в POSIX ш оболочка (ни зш, который использует установка/отключить), поэтому произойдет ошибка - ваш тест безоговорочно вернет ненулевое значение:

$ bash -lc 'shopt -q login_shell; эхо $?'

0

но

$ sh -lc 'магазин -q login_shell; эхо $?'
ш: 1: магазин: не найдено
127

и

$ zsh -lc 'shopt -q login_shell; эхо $?'
zsh:1: команда не найдена: магазин
127

С ~/.профиль (а также /etc/профиль, а также файлы в /etc/profile.d что он исходит) может быть прочитан другими оболочками, лучше всего поддерживать его совместимость с POSIX. AFAIK способ POSIX проверить оболочку входа в систему - проверить, $0 начинается с - персонаж экс.

случай $0 в 
  --*) echo "оболочка входа"
   ;; 
   *) echo "оболочка без входа в систему"
   ;;
эсак
Sayan Dey avatar
флаг vn
Правильно Спасибо. Но даже переход на /bin/bash не работает. Что делать, если я хочу запустить что-то только во время входа в систему. Отредактировал вопрос.
флаг hr
@SayanDey Я не думаю, что `shopt` также является законным в `zsh` - это `setopt`/`unsetopt`.IIRC * портативный * способ проверить оболочку входа в систему — проверить, является ли первый символ «$ 0» «-». См. редактирование.

Ответить или комментировать

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