#!/usr/bin/env sh
shorthost() {
# Set IFS to dot, so that we can split $@ on dots instead of spaces.
local IFS='.'
# Break up arguments passed to shorthost so that each domain zone is
# a new index in an array.
zones=($@)
# Echo out our first zone
echo ${zones[0]}
}
8条答案
按热度按时间sqserrrh1#
您是否在shell变量中包含服务器名称?您是否使用类似
sh
的shell?如果是,我会做你想做的事。
2skhul332#
您可以使用
cut
:zengzsys3#
要在pilcrow的答案上进行构建,不需要新变量,只需使用内置的$HOSTANME。
在两个完全不同的Linux上测试。
***2.6.18-371.4.1.el5,GNU bash,版本3.2.25(1)-发行版(i386-redhat-linux-gnu)**3.4.76-65.111.amzn1.x86_64,GNU bash,版本4.1.2(1)-发行版(x86_64-redhat-linux-gnu)
ffscu2ro4#
尝试使用-s选项:主机名-s
jdzmm42g5#
我使用命令
cut
、awk
、sed
或 *bash变量 *操作
通过切割
通过awk
通过sed
通过Bash变量
oknwwptz6#
您可以使用“uname -n”只获取主机名。
r1zhe5dt7#
您可以使用IFS来分割文本,对于域名,我们可以使用点/句点字符。
如果这是在你的脚本中,那么,例如,当你运行
shorthost test.example.com
时,你会得到test
。你可以调整它来适应你的用例,但是我认为知道如何将区域分解成数组是这里最重要的事情。我想提供这个解决方案,因为我觉得生成另一个进程是多余的,因为你可以在你的shell中用
IFS
轻松地完成它。需要注意的一件事是,一些用户会推荐做像hostname -s
这样的事情,但这在BSD用户区不起作用。例如,MacOS用户没有-s
标志,我不认为。5sxhfpxr8#
假设变量
$HOSTNAME
存在,那么尝试echo ${HOSTNAME%%.*}
来获取全限定主机名的最顶部。希望它能有所帮助。如果您感兴趣,可以参考下面引用的REHL7主机上的部分
/etc/bashrc
: