Чому $ SHELL не змінюється, коли я запускаю нову оболонку?


14
 $ echo $SHELL
/bin/bash
 $ /bin/ksh93
 $ echo $SHELL
/bin/bash
 $ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), 
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

 $ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
 $ ssh test@localhost
test@localhost's password:
 $ echo $SHELL
/bin/ksh93
 $ bash
 $ echo $SHELL
/bin/ksh93

Я очікую $SHELLзміни після запуску іншої оболонки. Чому ні?

PS Однак оболонка все-таки змінюється, лише змінна $ SHELL залишається такою ж:

 $ dash
 $ echo $SHELL
/bin/bash
 $ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found

2
використовувати echo $0для отримання поточної оболонки
Манула Вайдянатха

Відповіді:


13

Ви не повинні сподіватися, що ця змінна зміниться. Він використовується для зберігання шляху до вашої оболонки за замовчуванням, тобто до тієї, що зберігається в базі даних паролів, а не тієї оболонки, яку ви зараз використовуєте.


8

SHELLце визначається POSIX . Цитування:

SHELL Ця змінна повинна представляти ім'я трактора, який бажаний інтерпретуючий командний користувач. [...]

Запуск іншої оболонки не обов'язково вказує на зміну переваг користувача.

Добре вивчити типи речей, які вказує POSIX, і де їх шукати, оскільки більшість * .nix систем спрямовані на відповідність POSIX. Змінні середовища - одна з таких речей.


-3

Змінна SHELL зберігає батьківську оболонку для вашого сеансу, яка іноді збігається з вашою оболонкою для входу за замовчуванням . $ SHELL - це батьківська оболонка, яка породила поточний сеанс.

тож, якщо я використовую bash для мого користувача і роблю це:, chsh -s /bin/zsh userколи я це робити echo $SHELL, відображається оболонка все одно будеBASH .

дивіться цю статтю .


4
Стаття, на яку ви посилаєтесь, неправильна. Це навпаки, тобто SHELL зберігає вашу стандартну оболонку входу (за останнім часом входу), яка іноді відповідає вашій батьківській оболонці. Ця змінна ніколи не змінюється батьківською або поточною оболонкою. Єдина дія, яку вони можуть зробити - це встановити її, якщо (несподівано) вимкнено.
jlliagre
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.