Mon problème est le suivant :
Je lis le contenu d’un fichier, alias /etc/default/sslh, pour récupérer la ligne concernant les options du service, soit celle-ci :
Est-il possible avec awk d’obtenir son contenu … oui.
me restitue bien :
--user sslh --listen 192.168.xyz.abc:443 --ssh 127.0.0.1:22 --ssl 127.0.0.1:443 --pidfile /var/run/sslh/sslh.pid
On doit même pouvoir concaténer les deux … non ?!
Ce que j’aimerais arrivé à faire est que, dès qu’il détecte un espace, cela remplisse une nouvelle variable.
Soit un tableau associatif, nommé SSLH_INFOS, par exemple …
Quand le script lit que l’écriture commence par ‘–’, il créé la variable, tel que SSLH_INFOS[“user”], par exemple, et que l’écriture suivante devienne sa valeur !
Oui, je sais, c’est un peu complexe … mais je serais étonné que cela ne soit pas faisable.
Quoiqu’il en soit, je tiens à ce que ce soit du Bash, et pas un autre langage de script
Devient :
awk -F '"' '/DAEMON_OPTS/ { print $2 }' /etc/default/sslh
Je n’y crois pas, j’y suis arrivé !!!
#!/bin/bash
#set -x
declare -A SSLH_INFOS
cmd="$(awk -F '"' '/DAEMON_OPTS/ { print $2 }' /etc/default/sslh)"
for element in ${cmd// / }; do
if grep -q '^--' <<< "${element}"; then
var="${element:2}"
SSLH_INFOS+=( [${var}]="" )
fi
if grep -q -v '^--' <<< "${element}"; then
SSLH_INFOS+=( [${var}]="${element}" )
fi
done
echo "${SSLH_INFOS["user"]}"
Champagne !