Я змінив ім'я хоста, чому мій bash PS1 не змінюється


21

Я змінив ім'я хоста, відредагувавши / etc / hostname, і можу побачити нове ім'я хоста за допомогою команд hostnameі hostname -F.

Але запит оболонки все ще показує старе ім'я хоста.

Це Ubuntu 11.0.4, до речі. Підказка задається в моєму, .bashrcяке я не редагував. Вихід із системи та навіть перезавантаження не впливають.

Відповідний розділ стандартного Ubuntu .bashrc:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

($ debian_chroot не встановлено, коли я входжу в систему ...)

Я думаю, що ім'я хоста підбирається спеціальним символом \ h.

Ось налаштування PS1, як повідомляється в оболонці:

PS1='\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

І ось що показує PS1:

username@oldhostname:~$ 

Я повторив процес, використовуючи точну команду у відповіді Уоррена. Виявляється, ім'я хоста працює до перезавантаження, але потім воно втрачається, хоча /etc/hostnameмістить нове ім'я хоста.


Що echo $PS1показує?
Кіт

@Keith - я оновив питання, щоб показати PS1.
Дізлі

Дякую за оновлення, яке мене відкинуло, бо я не пам'ятаю, що dhcp міг би це зробити, тому що я ніколи цього не дозволяв. Дякуємо також за те, що повернулися та залишилися на вершині питання та (врешті-решт) додали свої зміни як відповідь, ласкаво просимо до unix.SE!
Калеб

Відповіді:


24

Я відповідаю на власне запитання, з огляду на попередні відповіді Кіта та Уоррена, та фактичну резолюцію. Помічена проблема полягала в тому, що "я змінив ім'я хоста, чому мій bash PS1 не змінився?" Актуальною проблемою було "Чому моя система при перезавантаженні повернула старе ім'я хоста?"

Відповідь у цьому конкретному випадку полягала у тому, що: DHCP налаштований на зміну локальних налаштувань.

Ефективний спосіб зміни імені хоста

Наступне стосується Ubuntu, ymmv .

  1. Змініть стійке ім'я хоста, відредагувавши файл /etc/hostname.

    echo 'mynewhostname' | sudo tee /etc/hostname
  2. Для зміни імені хоста для запущеної системи використовуйте команду ім'я хоста . Без кроку 1 це буде відновлено під час перезавантаження. Має сенс використовувати значення, яке ви тільки що встановили:

    sudo hostname -F /etc/hostname

    або його еквівалент:

    sudo hostname `cat /etc/hostname`
  3. Встановіть повноцінне ім’я домену (FQDN) у /etc/hosts.

    Витяг:

    127.0.0.1    mynewhostname.mydomainname.com    mynewhostname
  4. Перевірте, чи працює на пристрої клієнт DHCP. На додаток до IP-адреси, сервер DHCP може також перекрити такі параметри, як ім'я хоста та роздільна здатність DNS. "Хмарний" хостинг-сервіс може це зробити, тому зображення машини на диску можна повторно використовувати без редагування файлів конфігурації.

    Якщо він існує, відредагуйте файл конфігурації клієнта DHCP, /etc/default/dhcpcdщоб прокоментувати SET_HOSTNAMEдирективу:

    #SET_HOSTNAME='yes'
  5. По можливості перезавантажте систему та перевірте, чи змінилось ім'я:

    hostname

Крок 4 був новиною для мене і мене вигнав. Я вважав, що було б корисно задокументувати весь процес у цій відповіді. Цей крок люб’язно наданий (Linode) інструкціям мого хостинг-сервісу, які я справді повинен був правильно прочитати.


Якщо ця відповідь здасться доцільною, позиція інших буде оцінена, оскільки я не можу проголосувати за свою власну відповідь.
Дізлі

2

У файлі /etc/hostnameзберігається стійка копія імені хоста і використовується під час завантаження для встановлення копії часу виконання. Щоб змінити копію часу без перезавантаження, скажіть:

$ sudo hostname `cat /etc/hostname`

Або просто передайте команду нове ім'я хоста як параметр hostname(1).


Моя проблема - в наполегливості. Я використав і перевірив ім'я хоста виконання (див. Питання). Також "sudo hostname -F / etc / hostname" - це альтернативна форма команди (man hostname). Однак я зробив так, як ви запропонували. Ім'я хоста втрачається при перезавантаженні. :( Я також поставив FQDN в /etc/host.conf і /etc/host.conf налаштований на використання лише bind. Я все ще
втрачаю

Я оновив Q з роздільною здатністю і трохи відповім на моє запитання. Дякую Уоррен / Кіт.
Дізлі

Це повинно було бути "Я також поставив FQDN в / etc / hosts."
Дізлі

-1

Я бачу , у вас є /hу вашому реченні PS1і потім повне доменне ім'я, тепер, НЕ могли б ви опублікувати ваш старий і новий хост ви намагаєтеся використовувати?

  • /h показує ім'я хоста до першого "."
  • /H показує повний FQDN

спробувати


Привіт некто. Зверніть увагу: це \ год не / год. Мені подобається зберігати приватні імена хостів, коли це виробничий сервер настільки "oldname" та "newname" (без крапок). Я стара рука в Unix, але це мене здивувало - я ніколи не бачив, щоб dhcpcd використовувався таким. Схоже, запит PS1 був неправильним, але справжньою проблемою було / etc / hostname замінено dhcpcd під час завантаження. Dhcpcd використовується тому, що моє зображення машини можна передислокувати чи дублювати на інший настройці IP-адреси, щоб мій хостер, Linode, генерував значення за замовчуванням за допомогою DHCP, тому кожен екземпляр мого зображення Ubunto є унікальним. Я початківець хмара, тому це було якось весело.
Дізлі

-1
  • Великий капітал hу вашому PS1:

    PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.