再起動せずにターミナルプロンプトのホスト名を「オンザフライ」で更新する

再起動せずにターミナルプロンプトのホスト名を「オンザフライ」で更新する

ホスト名の変更方法やターミナル プロンプトの更新方法を尋ねているのではありません。私が尋ねているのは、bash スクリプトからターミナル プロンプトを更新する方法です。これにより、ユーザーがスクリプトを終了したときにターミナル プロンプトが更新され、ユーザーがコマンド ラインから ~/.bashrc を source したり、再起動したりしなくても、新しく更新されたターミナル プロンプトを受け取ることができます。export と source でいくつかのことを試しましたが、何も機能しないようです。これが私の簡単なスクリプトです。

 while [[ $newhostname = "" ]]; do
   printf "Use of dash \"-\" is allowed\n"
   read -p "Enter New Hostname: "  newhostname
   # Sanitize and un-tint user input
   if [[ "$newhostname" =~ ^(([a-zA-Z0-9]|[a-zA-Z0-9][\_a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][\_A-Za-z0-9\-]{0,61}[A-Za-z0-9])$  && $$
     printf "\nNew Hostname \"$newhostname\" Passes Format Criteria\n"
     hostnamectl set-hostname $newhostname
     export HOSTNAME=$newhostname
     echo 'PS1='\"\\u@${newhostname}\\w# \" >> ~/.bashrc
     source ~/.bashrc
     printf "Hostname was updated to \"$newhostname\"\n\n"
     export PS1="\u@$HOSTNAME:\w# "
   else
     printf "\nNew Hostname \"$newhostname\" Does not Pass Format Criteria allowed for DNS domain name labels\n"
     printf "http://manpages.ubuntu.com/manpages/bionic/man5/hostname.5.html\n\n"
     printf "\033[1;91m ==>> Please Try Again <<==\033[1;33m\n\n"
     newhostname=""
   fi
 done # End While

おそらく、bash スクリプトからシステム ENV を変更または更新することはできないのでしょうか? おそらくそれは不可能なので、それを実行するのをやめる必要がありますか? 何かアイデアはありますか?

答え1

使用できますプロンプトコマンドPS1プロンプトが表示される前に毎回変数を更新する bash 変数。

この方法では、スクリプトから ENV への変更は反映されません (これは不可能です)。代わりに、プロンプトの再描画ごとに bash がホスト名をチェックするようになります。

これをあなたの に追加してください~/.bashrc:

# set the prompt to whatever you want 
# but instead of hostname (\h) use `$dynamic_hostname` variable
PS1='\$ \u@${dynamic_hostname} : \w # '

# prompt command will update the `$dynamic_hostname` variable 
# to the latest value before each prompt redraw
PROMPT_COMMAND='dynamic_hostname=$(cat /etc/hostname)'

# this is just to make sure that `$dynamic_hostname` is not unset at any time
realtime_hostname=$(cat /etc/hostname)

プロンプトに表示されるホスト名は、に基づいて再描画ごとに更新されます/etc/hostname

もちろん、他のファイルやコマンドに基づいてホスト名を更新することもできます。

関連情報