Aller au contenu

Aide_Script_Bash


kejako

Messages recommandés

######Code##################################################################

id_arg="struct\ r_debug"

echo $id_arg

var="/usr/include/utmpx.h"

echo $var

echo "Debut1"

grep struct\ r_debug /usr/include/utmpx.h | read recherche_suite

echo "Fin1"

echo "Debut2"

grep $id_arg $var | read recherche_suite

echo "Fin2"

#####Fin_Code##############################################################

Voici le résultat dans le shell :

struct\ r_debug

/usr/include/utmpx.h

Debut1

Fin1

Debut2

grep: Barre oblique inverse en suffixe

Fin2

T_T, je ne comprend pas comment grep a pu me sortir une erreur : Barre oblique inverse en suffixe.

Lien vers le commentaire
Partager sur d’autres sites

##test.sh

echo $1

echo "grep $1 $2"

###End_test.sh

dans le shell :

% bash test.sh struct\ r_debug /usr/include/utmpx.h

struct r_debug

grep struct r_debug /usr/include/utmpx.h

%

Si 'executais j'aurais cette erreur :

Erreur r_debug n'est pas un fichier (et même si, ce n'est pas dans lui que je veut faire ma recherche)

Pour resoudre ce problème je doit étendre mon argument comme ceci :

arg=$1

new_arg=${arg// /\ }

qui remplace tout les espaces par slash espace.

puis en donnant echo "grep $new_arg $var"

j'ai le bon affichage a savoir :

struct\ r_debug

grep struct\ r_debug /usr/include/utmpx.h

En faite il faut verifier tout les arguments quand on veut les réutiliser.

Lien vers le commentaire
Partager sur d’autres sites

Nan mais attends, ce que tu voudrais faire, c'est

grep "struct r_debug" /usr/include/utmpx.h

si tu fais

grep struct r_debug /usr/include/utmpx.h

tu passes 3 arguments à grep

$1 = struct

$2 = r_debug

et $3 = /usr/include/utmpx.h

Or tu ne veux passer que 2 arguments

$1 = struct r_debug

et $2 = /usr/include/machin.h

C'est l'espace qui fout la merde, parce que bash l'interprete comme un séparateur entre arguments. Il faut donc protéger ton espace. Tu as deux solution pour le faire. Soit, tu invoques

grep struct\ r_debug /usr/include/truc.h

et tu protège l'espace par un \

Soit tu invoques

grep "struct r_debug" /usr/include/plop.h

et tu protèges l'espace en signifiant à bash que le premier argument est "struct r_debug"

du coup, si tu fais

id_arg="struct r_debug"

grep "${id_arg}" ${var} | read recherche_suite

Sans mettre le \, ça devrait marcher aussi :yes:

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...