1357 shaares
1168 private links
1168 private links
La boucle doit être alimentée par un process au même niveau.
Par exemple, cette boucle ne peut modifier la variable globale unformatted
.
#!/bin/bash
unformatted=""
lsblk -dn -o NAME,TYPE,SIZE | while read name type size
do
if [ "$type" == "disk" ]
then
parts=$(lsblk -n /dev/$name | grep part)
if [ -z "$parts" ]
then
unformatted="$unformatted /dev/$name,$size"
fi
fi
done
Dans la boucle while
la variable unformatted
est locale et ne modifie donc pas la variable globale du même nom définie plus haut car la boucle ne s'exécute pas au même niveau que le shell principal, mais dans un subshell à cause du pipe |
.
Une solution pour l'exécuter au même niveau, utiliser <<<
. On remplace donc la boucle par celle-ci.
#!/bin/bash
unformatted=""
while read name type size
do
if [ "$type" == "disk" ]
then
parts=$(lsblk -n /dev/$name | grep part)
if [ -z "$parts" ]
then
unformatted="$unformatted /dev/$name,$size"
fi
fi
done <<< $(lsblk -dn -o NAME,TYPE,SIZE)