зміна оболонки з zsh на bash


17

Мій веб-сервер був підроблений тим, хто використовував оболонку zsh. Мені зручніше використовувати bash shell, оскільки це типові настройки, які поставляються з Ubuntu та OS X (дві основні операційні системи, які я використовую). Але ці питання зосереджені на сервері Ubuntu. У мене на цьому веб-сервері працює 4 веб-сайти, я використовую byobu, я використовую tmux, я використовую rubin / ruby ​​на рейках, node.js, apache, кілька демонів. Якщо я переключу поточну кореневу оболонку з zsh на bash, чи можуть виникнути негативні побічні ефекти, які можуть бути наслідком цього перемикача? Наприклад, чи вбиватимуться процеси, оскільки їх батьківський процес (оболонка) був переключений?


Ви запитуєте про наслідки зміни (яких немає, я зараз використовую zsh і можу переходити на баш, коли мені подобається) чи запитуєте ви про те, як ефективно змінити оболонку?
Брайам

@Braiam Я нервую наслідки змін. Якщо наслідків не буде, то я змінюсь. Я просто думав, що оболонка є батьківським процесом для деяких таких демонів, як апаш, і якщо я перейду з неї, це вб'є процес апаша. Але я гадаю, що я помиляюся.
JohnMerlino

Відповіді:


10

Змінивши оболонку, через sudo chsh --shell=/bin/bash $USER, змінить оболонку в /etc/passwd. Це значення надається лише під час входу, коли система не має уявлення, яку оболонку використовувати для вас.

Ті, що йдуть процеси, запущені чи zsh, bash apacheабо evil_overlord's_programНЕ будуть порушені


Чи не оболонка є батьківським процесом інших процесів, що працюють в ній, або просто керуючий термінал (а не оболонка) буде вважатися батьківським процесом?
ДжонМерліно

loginПрограма виконується в процесі, як і всі. Коли він пускає вас, він створює інший процес з вашим UID тощо, і запускає / bin / bash (від / etc / passwd). Оболонка bash зчитується з STDIN (налаштовується login), і буде розщеплювати / виконувати невбудовані команди, чекати, коли вони завершаться, і циклує додаткові команди. Ідея "керування терміналом" не корисна в Unix / Linux.
waltinator

26

Відповідь із переповнення стека ( перехід від zsh до bash ):

Ви можете просто використовувати exec, щоб замінити поточну оболонку новою оболонкою:

Перейти на bash:

exec bash

Перейти на zsh:

exec zsh

Це не вплине на нові вікна терміналів чи що-небудь, але це зручно.


не працює. досі: echo $ SHELL / usr / bin / zsh
ses

8

Відкрийте свій термінал і використовуйте таку команду:

chsh -s $(which bash)

Я припускаю, що це еквівалент chsh -s / bin / bash
JohnMerlino

2
which bashдав би абсолютний шлях bash, тож це було б те саме, якби /bin/bashде bashбуло розташоване.
ryanjdillon

0

На Mac OS Каталіна

  1. Змінити на zsh:

    chsh -s /bin/zsh
  2. Змінити на bash:

    chsh -s /bin/bash
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.