Bash - スクリプトでホスト名を変更した後、PS1は正しいホスト名で更新されません。

Bash - スクリプトでホスト名を変更した後、PS1は正しいホスト名で更新されません。

これはstackoverflowの私の投稿のコピーです。ここに質問する必要があることに気づきました...

ホスト名を変更し、bashプロンプト(PS1変数)を正しいホスト名にすぐに更新するスクリプトを実行したいと思います。どうすればいいですか?

私はこれを実行します

#!/bin/bash
# Usage: ./changehost <newhostname>

#Do two sed's to edit the files for persistent hostname change
sed -i s/$(hostname)/$1/g "/etc/hosts"
sed -i s/$(hostname)/$1/g "/etc/sysconfig/network"

#run the hostname command with new hostname to update it
hostname $1

こんな端末でこれを手に入れよう

[user@host dir]# ./changehost newhostname
[user@host dir]# 

ところで私が欲しいのはこれだ。

[user@host dir]# ./changehost newhostname
[user@newhostname dir]# 

新しいシェルを開くと、端末は正しく更新されます。

私もこれを試してみました。

export PS1='somestring'; export PS1='[\u@\h \W]\$' 

端末のスクリプトの外側では「somestring」に切り替え、その逆に切り替えますが、ホスト名は同じままです。 :\

プロセスの開始時に \h がメモリに保存され、起動後に変更できない可能性がありますか?

ベストアンサー1

PS1が次の場合:

export PS1='[\u@\h \W]\$'

\ hの値は、bashが起動したときにのみ設定されます。したがって、ホスト名を変更する場合は、新しいbashインスタンスを起動する必要があります。

exec bash

bashを新しいインスタンスに置き換えます(\ h値を更新)。残念ながら、実行中のスクリプトは終了します。ホスト名が変更された後にコードを実行するシェルスクリプトを変更するには、いくつかの追加の魔法が必要です。私は更新されたホスト名を使用することはできないと思います\h。しかし、私はそれがあなたが要求するものではないと思います。

おすすめ記事