C'est tout bête, j'aimerais éviter l'erreur que peux provoquer :
for i in /sys/class/scsi_disk/*; do
# manipule $i
# peut provoquer un
# /sys/class/scsi_disk/*/device/model: No such file or directory
# si /sys/class/scsi_disk/ est vide
done
La seule façon de faire est de tester explicitement si "$i" vaut
"/sys/class/scsi_disk/*" ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
On Thu, 13 Dec 2007 14:45:38 +0100, Daniel Déchelotte wrote:
Bonjour,
C'est tout bête, j'aimerais éviter l'erreur que peux provoquer :
for i in /sys/class/scsi_disk/*; do # manipule $i # peut provoquer un # /sys/class/scsi_disk/*/device/model: No such file or directory # si /sys/class/scsi_disk/ est vide done
La seule façon de faire est de tester explicitement si "$i" vaut "/sys/class/scsi_disk/*" ? [...]
C'est chiant hein?
Ya pas de solution standard. Mais chaque shell a son extension pour ca.
En zsh
for i in .../*(N); do
En bash, ya un shopt qui va bien.
Sinon, si des fois tu as besoin que ce soient des fichiers reguliers, ou alors qu'ils soient lisibles, tu peux ajouter un test qui reglera aussi ca:
for i in *; do [ -f "$i" ] && [ ! -L "$i" ] || continue ... done
for i in *; do [ -r "$i" ] || continue ... done
[ "$i" = "*" ] || continue n'est pas un test correcte, car il peut tres bien exister un fichier qui s'appelle "*". Ce qu'on fait alors, c'est:
set -- [*] * case $1$2 in ('[*]*') : la liste est vide;; (*) shift for i do ... done;; esac
-- Stephane
On Thu, 13 Dec 2007 14:45:38 +0100, Daniel Déchelotte wrote:
Bonjour,
C'est tout bête, j'aimerais éviter l'erreur que peux provoquer :
for i in /sys/class/scsi_disk/*; do
# manipule $i
# peut provoquer un
# /sys/class/scsi_disk/*/device/model: No such file or directory
# si /sys/class/scsi_disk/ est vide
done
La seule façon de faire est de tester explicitement si "$i" vaut
"/sys/class/scsi_disk/*" ?
[...]
C'est chiant hein?
Ya pas de solution standard. Mais chaque shell a son extension
pour ca.
En zsh
for i in .../*(N); do
En bash, ya un shopt qui va bien.
Sinon, si des fois tu as besoin que ce soient des fichiers
reguliers, ou alors qu'ils soient lisibles, tu peux ajouter un
test qui reglera aussi ca:
for i in *; do
[ -f "$i" ] && [ ! -L "$i" ] || continue
...
done
for i in *; do
[ -r "$i" ] || continue
...
done
[ "$i" = "*" ] || continue
n'est pas un test correcte, car il peut tres bien exister un
fichier qui s'appelle "*". Ce qu'on fait alors, c'est:
set -- [*] *
case $1$2 in
('[*]*') : la liste est vide;;
(*) shift
for i do
...
done;;
esac
On Thu, 13 Dec 2007 14:45:38 +0100, Daniel Déchelotte wrote:
Bonjour,
C'est tout bête, j'aimerais éviter l'erreur que peux provoquer :
for i in /sys/class/scsi_disk/*; do # manipule $i # peut provoquer un # /sys/class/scsi_disk/*/device/model: No such file or directory # si /sys/class/scsi_disk/ est vide done
La seule façon de faire est de tester explicitement si "$i" vaut "/sys/class/scsi_disk/*" ? [...]
C'est chiant hein?
Ya pas de solution standard. Mais chaque shell a son extension pour ca.
En zsh
for i in .../*(N); do
En bash, ya un shopt qui va bien.
Sinon, si des fois tu as besoin que ce soient des fichiers reguliers, ou alors qu'ils soient lisibles, tu peux ajouter un test qui reglera aussi ca:
for i in *; do [ -f "$i" ] && [ ! -L "$i" ] || continue ... done
for i in *; do [ -r "$i" ] || continue ... done
[ "$i" = "*" ] || continue n'est pas un test correcte, car il peut tres bien exister un fichier qui s'appelle "*". Ce qu'on fait alors, c'est:
set -- [*] * case $1$2 in ('[*]*') : la liste est vide;; (*) shift for i do ... done;; esac
-- Stephane
Nicolas George
Stephane Chazelas wrote in message <47617066$0$864$:
for i in /sys/class/scsi_disk/*; do Ya pas de solution standard.
Euh, si : tester si $i existe.
Stephane Chazelas wrote in message
<47617066$0$864$ba4acef3@news.orange.fr>:
for i in /sys/class/scsi_disk/*; do
Ya pas de solution standard.