
ホスト名の変更方法やターミナル プロンプトの更新方法を尋ねているのではありません。私が尋ねているのは、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
。
もちろん、他のファイルやコマンドに基づいてホスト名を更新することもできます。