我正在为我的计算机创建一条登录消息,/etc/bashrc
并希望向计算机打招呼并显示计算机的名称。
这是我的代码:
# (system stuff here)
echo "Welcome, $(whoami)."
当我login
对任何用户使用时,它都会给我带来我所期望的:Welcome, avgjoe
例如。
但是,我想让它输出Welcome, avgjoe, to Tower of Nix
- 我的计算机名称已(通过系统偏好设置)设置为“Tower of Nix”。
那么,如果不对其进行硬编码(即echo "Welcome, $(whoami), to Tower of Nix."
),我如何获取计算机的名称?
我已经尝试过了hostname
,但是输出了192.168.2.13
。
事实证明,scutil --get ComputerName
它确实实现了我的要求(输出Tower of Nix
),但是当我查看的手册页时scutil
,它指出:
历史
该
scutil
命令出现在 Mac OS X Public Beta 中。
因此它可能不适用于所有操作系统,例如 Linux、*BSD 等。
我的问题:如何获取任意计算机上的计算机名称(或几乎任何)UNIX 的衍生版本?
答案1
许多但不是所有 Unix 类系统uname
都有这个n
选项
uname -n
答案2
Mac OS X 是少数允许您存储和检索与计算机的 IP 主机名完全不同的名称的类 Unix 系统之一。最好对 ; 的调用进行特殊处理scutil
。如果失败,请退回到更标准的hostname
:
echo "Welcome, $(whoami), to $(scutil --get ComputerName 2>/dev/null || hostname)."
答案3
GNU/Linux 上的主机名只是位于一个文件内。例如,我可以通过更改 .slackware 中的一行来编辑我在 Slackware 上的主机名/etc/HOSTNAME
。
我的建议就是将该文件连接到 bashrc 中的命令中。如果您的系统中没有主机名文件,/etc
您只需创建一个即可。另外,您可以使用$USER
not ,whoami
因为该变量USER
是用登录者的姓名填充的。
该命令如下所示:
echo "Welcome, $USER, to `cat /etc/HOSTNAME`"