Script qui fonctionne en bash mais pas en Perl sniff... [Résolu/Fermé]

Signaler
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
-
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
-
Bonsoir tout le monde !!

Voilà, je code un petit programme et pour l'instant j'en suis à la portion detection usb.

j'ai donc fait un test en bash


#!/bin/bash

while [ 1 ]
do
if [ -b "/dev/disk/by-uuid/4489-7E11" ] ; then
echo "coucou"
#exit 0
sleep 1
clear
else
echo "pas coucou"
sleep 1
clear
fi
done

On ne peut plus simple.
La même chose en Perl


#!/usr/bin/perl

use strict;
use warnings;

my $u = "4489-7E11";
my $uuid = 'ls -l /dev/disk/by-uuid/';

#print $uuid;
#exit;

while (1) {
if("$uuid" =~ /${u}/) {
print "coucou\n";
sleep(1);
system("clear");
}else {
print "pas coucou\n";
sleep(1);
system("clear");

}
}


Donc le problème:

Suand j'exécute le script bash avec la clé connectée, "coucou" s'affiche, quand je la déconnecte (le script tourne toujours) "pas coucou" s'affiche, tout va bien.

Par contre avec le script perl...
Quand j'exécute le script avec la clé connectée, "coucou" s'affiche, quand je la débranche(le script tourne toujours) "pas coucou" ne s'affiche pas -_-

J'ai l'impression que le script ne repasse pas dans le if et donc par conséquent il ne doit pas repasser avant dans le while...

Qu'en pensez vous ?

Merci d'avance ( :

2 réponses

Messages postés
18224
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
26 septembre 2020
5 008
hello
vérifier ce que retourne, en ligne de commande:
ls -l /dev/disk/by-uuid/ | grep 4489-7E11
et dans perl:
if("$uuid" =~ /${u}/)
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
11
J'ai bien évidemment fait toute une série de tests avant de poster
Messages postés
5407
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 septembre 2020
898
Salut LezardMoo,

CCM transforme les backticks (AltGr - 7) en ', mais je suppose que ton
my $uuid = 'ls -l /dev/disk/by-uuid/';
est bien avec des apostrophes arrières.

On peut les remplacer avec l'opérateur équivalent qx.

Cependant, ton problème est que le résultat de
ls
n'est évalué que lors de la déclaration de $uuid et non pas à chaque itération de la boucle.

Donc, il faudrait juste faire
my $uuid;
avant la boucle.

et dans la boucle while, et avant le if :
$uuid = qx(ls -l /dev/disk/by-uuid/);


Par ailleurs, les accolades sont inutiles dans
if("$uuid" =~ /${u}/)
, il suffit de te référer à
$u
.


Dal
Messages postés
5407
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 septembre 2020
898
Les guillemets aussi, d'ailleurs. Donc
if ($uuid =~ /$u/) {
suffit.
Messages postés
554
Date d'inscription
mercredi 5 janvier 2011
Statut
Membre
Dernière intervention
21 janvier 2015
11
Salut [Dal],

tout simplement Merci !

en plus dans le bash le test est dans la boucle ^^
Merci aussi pour l'opérateur, très pratique.

Bonne continuation ( :