Besoin d'aide - Script shell
Résolu/Fermé
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
-
7 mars 2011 à 18:35
fabouf Messages postés 1271 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 24 décembre 2015 - 8 mars 2011 à 21:50
fabouf Messages postés 1271 Date d'inscription samedi 20 octobre 2007 Statut Membre Dernière intervention 24 décembre 2015 - 8 mars 2011 à 21:50
A voir également:
- Besoin d'aide - Script shell
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Ghost script - Télécharger - Polices de caractères
- Microsoft activation script - Accueil - Windows
- Script bat - Guide
4 réponses
Hxyp
Messages postés
401
Date d'inscription
vendredi 28 janvier 2011
Statut
Membre
Dernière intervention
27 avril 2014
54
7 mars 2011 à 22:30
7 mars 2011 à 22:30
Bonjour,
Il ne faut pas utiliser #!/bin/bash retirez cette ligne car ça ouvre un nouveau shell avec un historique vide. Testez un .sh avec uniquement "history" dedans. src : http://unix.ittoolbox.com/groups/technical-functional/solaris-l/history-utility-in-bash-script-605752
Pour exécuter une commande qui est contenue dans une variable utilisez "eval"
exemple :
var="echo hello world"
eval $var
Pouvez aussi utiliser "history -w monfichier" pour enregistrer l'historique dans un fichier en particulier, ou utiliser "history -a" pour ajouter les dernières commandes utilisées dans l'historique en cours et le récupérer avec un "cat ~/.bash_history"
Il ne faut pas utiliser #!/bin/bash retirez cette ligne car ça ouvre un nouveau shell avec un historique vide. Testez un .sh avec uniquement "history" dedans. src : http://unix.ittoolbox.com/groups/technical-functional/solaris-l/history-utility-in-bash-script-605752
Pour exécuter une commande qui est contenue dans une variable utilisez "eval"
exemple :
var="echo hello world"
eval $var
Pouvez aussi utiliser "history -w monfichier" pour enregistrer l'historique dans un fichier en particulier, ou utiliser "history -a" pour ajouter les dernières commandes utilisées dans l'historique en cours et le récupérer avec un "cat ~/.bash_history"
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 10:32
8 mars 2011 à 10:32
J'y suis presque !
if [ $# -ne 1 ] || [ $1 -lt 1 ]
then
echo "erreur de paramètre"
else
history > histo
res=$(grep "^ $1" histo| cut -d\ -f3-999)
eval $res
fi
en enlevant la ligne du shebang j'arrive donc à avoir mon historique,
mais je n'arrive pas à exécuter cette variable resultat
( chmod ok, ./monscript.sh xxx ok, mais . monscript.sh xxx ne retourne rien )
if [ $# -ne 1 ] || [ $1 -lt 1 ]
then
echo "erreur de paramètre"
else
history > histo
res=$(grep "^ $1" histo| cut -d\ -f3-999)
eval $res
fi
en enlevant la ligne du shebang j'arrive donc à avoir mon historique,
mais je n'arrive pas à exécuter cette variable resultat
( chmod ok, ./monscript.sh xxx ok, mais . monscript.sh xxx ne retourne rien )
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
8 mars 2011 à 12:28
8 mars 2011 à 12:28
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 mars 2011 à 12:31
8 mars 2011 à 12:31
Salut,
et tu lances le script avec la commande (attention au . et ESPACE au début)
#!/bin/bash if [ $# -ne 1 ] || [ $1 -lt 1 ] then echo "erreur de paramètre" else history > histo res=$(grep "^ $1" histo| cut -d\ -f3-999) echo $res # pas besoin du eval, puisque $(commande) est stocké dans res fi
chmod +x script.sh
et tu lances le script avec la commande (attention au . et ESPACE au début)
. /chemin/vers/script.sh
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
8 mars 2011 à 13:01
8 mars 2011 à 13:01
Salut,
# pas besoin du eval, puisque $(commande) est stocké dans res
Ben si, si le but final est l'exécution de la commande, du moins c'est comme ça que je l'ai compris ;-\
# pas besoin du eval, puisque $(commande) est stocké dans res
Ben si, si le but final est l'exécution de la commande, du moins c'est comme ça que je l'ai compris ;-\
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
Modifié par lami20j le 8/03/2011 à 13:09
Modifié par lami20j le 8/03/2011 à 13:09
Salut,
Ben si, si le but final est l'exécution de la commande,
Tu as raison ;-)
En ce cas il faudra peut être qu'il nous affiche ce que done la comamnde
De toute façon il n'a pas besoin de history > histo
On peut faire comme ça si je ne me trompe pas.
Mais j'aurais plutôt penser à !NUMERO_DE_COMMANDE qu'à eval ;-)
A voir comment on met ça dans le script
Ben si, si le but final est l'exécution de la commande,
Tu as raison ;-)
En ce cas il faudra peut être qu'il nous affiche ce que done la comamnde
De toute façon il n'a pas besoin de history > histo
On peut faire comme ça si je ne me trompe pas.
#!/bin/bash if [ $# -ne 1 ] || [ $1 -lt 1 ] then echo "erreur de paramètre" else history | grep "^ $1" | cut -d\ -f3-999 fi
Mais j'aurais plutôt penser à !NUMERO_DE_COMMANDE qu'à eval ;-)
A voir comment on met ça dans le script
#!/bin/bash if [ $# -ne 1 ] || [ $1 -lt 1 ] then echo "erreur de paramètre" else !$1 # fait un test pour ça, merci ;-) fi
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
8 mars 2011 à 13:13
8 mars 2011 à 13:13
Re-
J'avais déjà testé ça hier soir et ça ne marchait pas ;-((
Pour preuve au cas ou...
J'avais déjà testé ça hier soir et ça ne marchait pas ;-((
Pour preuve au cas ou...
$ vi foo.sh $ chmod u+x foo.sh $ ./foo.sh 118 ./foo.sh: line 7: !118 : commande introuvable $ . /home/zipe/tmpfs/foo.sh 118 -bash: !118 : commande introuvable $
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 20:58
8 mars 2011 à 20:58
Et bien ca ne retourne rien,
#!/bin/bash
if [ $# -ne 1 ] || [ $1 -lt 1 ]
then
echo "erreur de paramètre"
else
res=$(history | sed -n "s/^ *"$1" *\(.*\)/\1/p")
echo $res # pour voir si la variable a changé, sinon il faut utiliser eval
fi
fab@Glou:~/Documents$ ./exec.sh 459
fab@Glou:~$ ./Documents/exec.sh 987
résultat : rien :(
#!/bin/bash
if [ $# -ne 1 ] || [ $1 -lt 1 ]
then
echo "erreur de paramètre"
else
res=$(history | sed -n "s/^ *"$1" *\(.*\)/\1/p")
echo $res # pour voir si la variable a changé, sinon il faut utiliser eval
fi
fab@Glou:~/Documents$ ./exec.sh 459
fab@Glou:~$ ./Documents/exec.sh 987
résultat : rien :(
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 mars 2011 à 21:11
8 mars 2011 à 21:11
Re,
Tu ne lis pas les message https://forums.commentcamarche.net/forum/affich-21108781-besoin-d-aide-script-shell#3
Tu ne lis pas les message https://forums.commentcamarche.net/forum/affich-21108781-besoin-d-aide-script-shell#3
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 21:13
8 mars 2011 à 21:13
si si ! j'y mets tout mon coeur , mais ca marche pas
fab@Glou:~/Documents$ chmod 777 exec.sh
fab@Glou:~/Documents$ ./exec.sh
erreur de paramètre
fab@Glou:~/Documents$ ./exec.sh 456
fab@Glou:~/Documents$ . exec.sh 456
fab@Glou:~/Documents$ chmod 777 exec.sh
fab@Glou:~/Documents$ ./exec.sh
erreur de paramètre
fab@Glou:~/Documents$ ./exec.sh 456
fab@Glou:~/Documents$ . exec.sh 456
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 mars 2011 à 21:17
8 mars 2011 à 21:17
Affiche le résultat de
history | grep 456
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 21:23
8 mars 2011 à 21:23
le soucis doit venir du grep,
avec ceci j'obtiens les lignes qui contiennent ce que j'ai passé en paramètre,
res=$( history | grep $1 | cut -d\ -f2-99)
echo $res
mais ce que je veux c'est garder la ligne qui commence par ce numero ...
avec ceci j'obtiens les lignes qui contiennent ce que j'ai passé en paramètre,
res=$( history | grep $1 | cut -d\ -f2-99)
echo $res
mais ce que je veux c'est garder la ligne qui commence par ce numero ...
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 21:25
8 mars 2011 à 21:25
avec grep "^ $1" ca fonctionne, ... maintenant c'est le cut qui doit m'enlever le premier champs
fabouf
Messages postés
1271
Date d'inscription
samedi 20 octobre 2007
Statut
Membre
Dernière intervention
24 décembre 2015
271
8 mars 2011 à 21:29
8 mars 2011 à 21:29
if [ $# -ne 1 ] || [ $1 -lt 1 ]
then
echo "erreur de paramètre"
else
res=$( history | grep "^ $1" | cut -d\ -f3-99)
eval $res
fi
ca fonctionne ! j'ai eus du mal à m'en rendre compte, car certaines lignes de mon historique ne renvoyait rien,
Merci à tous pour votre aide.
then
echo "erreur de paramètre"
else
res=$( history | grep "^ $1" | cut -d\ -f3-99)
eval $res
fi
ca fonctionne ! j'ai eus du mal à m'en rendre compte, car certaines lignes de mon historique ne renvoyait rien,
Merci à tous pour votre aide.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
8 mars 2011 à 21:31
8 mars 2011 à 21:31
Ok, tant mieux.
Tu peux mettre résolu alors ;-)
Tu peux mettre résolu alors ;-)
7 mars 2011 à 23:11
Modifié par lami20j le 8/03/2011 à 12:54
Il ne faut pas utiliser #!/bin/bash retirez cette ligne car ça ouvre un nouveau shell avec un historique vide.
Effectivement. Toutefois tu n'as pas lu le message jusqu'au bout.
If you wish to execute stmts in a file from
your current shell, then you will need to source it:
$ . yourfile
Ce qui veut dire que lorsqu'on utilise #!/bin/bash il faut lancer le script avec la commande
A lancer avec
et puis avec