#1 Le 01/06/2022, à 18:26
- PowaBanga
Bash : Gérer les espaces dans une variable
Salut à tous,
J'ai encore ce souci avec les espaces, sauf que cette fois, mes variable sont issues d'une commande...
J'ai donc essayé de gérer mes espaces en modifian la variable IFS, mais du coup, ça ne trouve pas mes fichier, alors que grep les a trouvé juste avant !
powabanga@ArchiBeelinkGilberte ~]$ cat ConnectionUnAuto.sh
#!/bin/bash
unAutomateConnexions() {
SAVEIFS=$IFS
IFS=$'\n'
for i in $(grep -rL autoconnect=false /etc/NetworkManager/system-connections/ | grep -v Residents| sed 's/ /\\ /g')
do
sed -i 's/type=wifi/type=wifi\nautoconnect=false/g' "$i"
done
sleep 120
unAutomateConnexions
IFS=$SAVEIFS
}
unAutomateConnexions
powabanga@ArchiBeelinkGilberte ~]$ sudo bash -x ./ConnectionUnAuto.sh
[sudo] Mot de passe de powabanga :
+ unAutomateConnexions
+ SAVEIFS='
'
+ IFS='
'
++ grep -rL autoconnect=false /etc/NetworkManager/system-connections/
++ grep -v Residents
++ sed 's/ /\\ /g'
+ for i in $(grep -rL autoconnect=false /etc/NetworkManager/system-connections/ | grep -v Residents| sed 's/ /\\ /g')
+ sed -i 's/type=wifi/type=wifi\nautoconnect=false/g' '/etc/NetworkManager/system-connections/Auto\ Gsm\ Marc.nmconnection'
sed: impossible de lire /etc/NetworkManager/system-connections/Auto\ Gsm\ Marc.nmconnection: Aucun fichier ou dossier de ce type
+ for i in $(grep -rL autoconnect=false /etc/NetworkManager/system-connections/ | grep -v Residents| sed 's/ /\\ /g')
+ sed -i 's/type=wifi/type=wifi\nautoconnect=false/g' '/etc/NetworkManager/system-connections/Auto\ TP-Link_1F42_5G.nmconnection'
sed: impossible de lire /etc/NetworkManager/system-connections/Auto\ TP-Link_1F42_5G.nmconnection: Aucun fichier ou dossier de ce type
+ for i in $(grep -rL autoconnect=false /etc/NetworkManager/system-connections/ | grep -v Residents| sed 's/ /\\ /g')
+ sed -i 's/type=wifi/type=wifi\nautoconnect=false/g' '/etc/NetworkManager/system-connections/Auto\ TP-Link_1F42.nmconnection'
sed: impossible de lire /etc/NetworkManager/system-connections/Auto\ TP-Link_1F42.nmconnection: Aucun fichier ou dossier de ce type
+ for i in $(grep -rL autoconnect=false /etc/NetworkManager/system-connections/ | grep -v Residents| sed 's/ /\\ /g')
+ sed -i 's/type=wifi/type=wifi\nautoconnect=false/g' '/etc/NetworkManager/system-connections/Auto\ Proximus-Home-8C18.nmconnection'
sed: impossible de lire /etc/NetworkManager/system-connections/Auto\ Proximus-Home-8C18.nmconnection: Aucun fichier ou dossier de ce type
+ sleep 120
^C
Hors ligne
#2 Le 01/06/2022, à 20:45
- nany
Re : Bash : Gérer les espaces dans une variable
Bonjour,
Si j’ai bien interprété ce que tu souhaites faire,
#!/bin/bash
unAutomateConnexions() {
find /etc/NetworkManager/system-connections -type f ! -name "*Residents*" -exec sh -c 'grep -n "autoconnect=false" "$1" || sed -i "/type=wifi/a\autoconnect=false" "$1"' _ '{}' \;
sleep 120
unAutomateConnexions
}
unAutomateConnexions
Dernière modification par nany (Le 02/06/2022, à 03:50)
Hors ligne
#3 Le 01/06/2022, à 20:52
- pingouinux
Re : Bash : Gérer les espaces dans une variable
Bonsoir,
Indépendamment de la réponse de nany, quel est le retour de
ls -lb /etc/NetworkManager/system-connections/Auto*
Hors ligne
#4 Le 02/06/2022, à 09:23
- PowaBanga
Re : Bash : Gérer les espaces dans une variable
wouaw, je n'aurais jamais pensé à me servir de find de cette manière. C'est vraiment intéressant, merci Nany.
Juste, est-ce que tu pourrais m'expliquer à quoi sert le underscore ' _ ' à la fin ?
pingouinux, je ne peux pas te répondre pour l'instant car je n'ai pas accès à la machine pour l'instant
Hors ligne
#5 Le 02/06/2022, à 11:47
- nany
Re : Bash : Gérer les espaces dans une variable
Juste, est-ce que tu pourrais m'expliquer à quoi sert le underscore ' _ ' à la fin ?
Eh bien il sert à passer comme argument ($1) le résultat de la recherche à la ligne de commande sh.
J’aurais tout aussi bien pu mettre :
find … -exec sh -c 'grep -n "autoconnect=false" "{}" || sed -i "/type=wifi/a\autoconnect=false" "{}"' \;
Hors ligne
#6 Le 02/06/2022, à 16:09
- Watael
Re : Bash : Gérer les espaces dans une variable
quand on appelle un shell compatible POSIX avec l'option -c, les paramètres positionnels ($0 $1 $2 ...${10}) commencent à $0, contrairement à un script dans lequel les paramètres positionnels commencent à $1, et où $0 est le nom du script, ou au shell pour qui $0 est le nom du shell.
donc, pour conserver le comportement d'un script ou d'un shell interactif, on place ce paramètre fictif.
mais on pourrait mettre n'importe quoi; moi, je préfère mettre le chemin absolu et le nom du shell utilisé.
par exemple
sh -c 'commandes...' /bin/sh param1 param2
$0 fera apparaître /bin/sh, et la suite des paramètres positionnels feront apparaître param1 param2...
Dernière modification par Watael (Le 02/06/2022, à 20:16)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#7 Le 04/06/2022, à 14:26
- LeoMajor
Re : Bash : Gérer les espaces dans une variable
salut,
il y a nmcli pour NetworkManager ...
à adapter,
cat autoconnect.bash
#!/bin/bash
status=$(LANG=C nmcli dev | awk '/ethernet\s+connected/{ans="e"}; /wifi\s+connected/{ans=ans"w"};END{print ans}')
case "$status" in
"e") echo "rj45 seulement"
;;
"w") echo "wifi seulement"
;;
"ew") echo "rj45 + wifi = conflit ? -> désactive wifi"
#nmcli dev disconnect enp30s0
nmcli radio wifi off
;;
"")
echo "nul -> active rj45"; nmcli dev connect enp30s0
#echo "nul -> active wifi"; nmcli radio wifi on
;;
esac
les noms des interfaces réseaux : nmcli dev | awk 'NR>1 {print $1}' || nmcli dev
Hors ligne
#8 Le 11/06/2022, à 12:30
- PowaBanga
Re : Bash : Gérer les espaces dans une variable
LeomMajor, merci pour ton message, il sera certainement utile à quelqu'un.
Dans mon cas, ce que je cherche à faire avec mon script, c'est surtout de désactiver la connexion automatique de tous les réseaux wifi, excepté celui que j'ai choisi. S'il y a une commande avec nmcli qui permette de faire ça, voir même de s'assure que le mot de passe soit bien présents sur tous les bssid du réseau choisi, je suis preneur
je redis encore merci à watael et nany, vos réponse sont super cool et constructive, merci beaucoup !
Dernière modification par PowaBanga (Le 11/06/2022, à 12:31)
Hors ligne