Browse Source

new tool: fqdn

main
pvincent 1 week ago
parent
commit
1a917e3a1a
  1. 3
      .vscode/extensions.json
  2. 90
      tools/fqdn

3
.vscode/extensions.json

@ -1,7 +1,6 @@
{
"recommendations": [
"mads-hartmann.bash-ide-vscode",
"rogalmic.bash-debug",
"mkhl.shfmt",
"rogalmic.bash-debug"
],
}

90
tools/fqdn

@ -0,0 +1,90 @@
#!/usr/bin/env bash
# CONSTANTS
BASEDIR=$(dirname "$0")
COMMAND=show
# FUNCTIONS
function usage {
echo "usage: $(basename "$0") [--set NEW_FQDN]"
echo " either returns the fully qualified name when pass with no argument"
echo " or define the new fully qualified name when pass --set {NEW_FQDN}"
}
function parse_options {
while [[ $# -gt 0 ]]; do
case "$1" in
'--set')
COMMAND=define
shift 1
[[ -z ${1:-} || $1 =~ ^- ]] && usage && exit 1
NEW_FQDN=$1
;;
--help | -h)
usage && exit 0
;;
*)
echo >&2 "Unknown option: $1" && usage && exit 2
;;
esac
shift 1 # Move to the next argument
done
}
function show {
hostname -f
}
function define {
if [[ $NEW_FQDN == *.* ]]; then
name=$(echo $NEW_FQDN | cut -d. -f1)
domain=${NEW_FQDN#${name}.}
if [[ -n $domain ]]; then
define_fqdn $name $domain
else
define_single $name
fi
else
define_single $NEW_FQDN
fi
}
function define_single {
local single=$1
local previous=$(hostname -f)
for i in $(grep $previous /etc/hosts | cut -f1); do
append_or_replace ^$i.* "$i\t$single" /etc/hosts >/dev/null
done
hostnamectl hostname $single
}
function define_fqdn {
local name=$1
local domain=$2
local previous=$(hostname -f)
for i in $(grep $previous /etc/hosts | cut -f1); do
append_or_replace ^$i.* "$i\t$name.$domain $name" /etc/hosts >/dev/null
done
hostnamectl hostname $name
}
function perform_command {
case $COMMAND in
show)
show
;;
define)
[[ $(id -u) != 0 ]] && echo 'require root privilege, please prepend the command with `sudo`' && exit 10
define
;;
esac
}
# MAIN
set -Eue
parse_options $*
perform_command
Loading…
Cancel
Save