Script qui fonctionne en bash mais pas en Perl sniff...

Résolu/Fermé
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 6 nov. 2013 à 00:49
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 - 8 nov. 2013 à 22:21
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 ( :
A voir également:

2 réponses

dubcek Messages postés 18753 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 7 novembre 2024 5 619
6 nov. 2013 à 14:23
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}/)
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
8 nov. 2013 à 22:08
J'ai bien évidemment fait toute une série de tests avant de poster
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 7/11/2013 à 11:24
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
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
7 nov. 2013 à 13:10
Les guillemets aussi, d'ailleurs. Donc
if ($uuid =~ /$u/) {
suffit.
0
LezardMoo Messages postés 554 Date d'inscription mercredi 5 janvier 2011 Statut Membre Dernière intervention 21 janvier 2015 14
8 nov. 2013 à 22:21
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 ( :
0