如何使 IP 地址作为 Bash 提示符的一部分出现?

如何使 IP 地址作为 Bash 提示符的一部分出现?

使用 Ubuntu 22.04 运行 Amazon EC2 实例。弹性 IP 地址为 52.120.94.72。

我希望 bash 提示符像这样(没有空格)

[email protected]:~/working_directory$

根据网上的一些建议,我像这样编辑了 /etc/hosts 文件的顶部

127.0.0.1 localhost 52.120.94.72

甚至在 .bashrc 中添加了以下行

export PS1='\[\033[0;32m\]\u@\h:\[\033[36m\]\W\[\033[0m\] \$ '

但它不起作用,目前,bash 提示符看起来像

della@52:~ $

这太荒谬了。如何让它看起来像我想要的那样。另外,$HOSTNAME 环境变量在这种情况下重要吗?特别是,如果我在这个实例中运行一些 Web 服务器,我可以只使用 IP 地址进行调用,对吗?不需要主机名。

答案1

据我所知,让你的提示真正得出 IP 地址相当困难。根据特殊字符列表,Bash 没有提供现成的变量来使用它这里

我认为最简单的方法就是在提示定义中对您想要看到的 IP 地址进行硬编码:

 export PS1='\[email protected]:\w\$'

其中\u\$\w是一些特殊字符,它们会被你的 bash shell 根据以下定义进行扩展:这里

  • \u
    当前用户的用户名。
  • \w PWD shell 变量的值($PWD),用$HOME波浪号缩写~(使用$PROMPT_DIRTRIM变量)。
  • \$
    如果有效uid为0,#则为,否则为$

使用您引用的示例中的其他转义符:

 export PS1='\[\033[0;32m\]\[email protected]:\[\033[36m\]\w\[\033[0m\]\$'

您将获得一个用 ANSI 转义序列/代码格式化的提示,指示您使用的终端程序应用特定的格式和颜色。

https://stackoverflow.com/questions/4842424/list-of-ansi-color-escape-sequences 以获得详细概述。


当然,您可以依靠外部助手来获取您的 IP,例如查询实例元数据 URI:

MY_IP=$(curl http://169.254.169.254/latest/meta-data/public-ipv4)
export PS1='\u@$MY_IP:\w\$' 

相关内容