Page 1 sur 1
Créer une fonction bash avec deux commandes
Publié : 17 fév 2018, 14:44
par nam1962
Je fais un
tuto sur l'Almanet pour trouver les fichiers LO ou markdown ou texte ou .doc contenant une chaîne de caractères avec une fonction .bashcr
Le piège théorique est l'ODF et le .docx
Là je m'en sors :
function greptout(){
find . -type f \( -name "*.od*" -or -name "*.docx" \) | while read i ; do
[ "$" ] || { echo "Entrez une recherche!" ; exit 1 ; }
unzip -ca \$i" 2>/dev/null | grep -iq "$*"
if [ 0 -eq 0 ] ; then
echo "resultat dans $i" | nl
fi
done
}
L'autre sujet est de trouver la chaîne dans les fichiers directement lisibles (.txt, .md, .doc)
Là, je m'en sors autrement :
find . -type f | grep -Ril "le texte dont je me souviens" ~/le_chemin_de/mon_dossier
Je cherche du coup à regrouper les commandes :
function greptout(){
find . -type f \( -name "*.od*" -or -name "*.docx" \) | while read i ; do
[ "$" ] || { echo "Entrez une recherche!" ; exit 1 ; }
unzip -ca "$i" 2>/dev/null | grep -iq "$*"
if [ 0 -eq 0 ] ; then
echo "resultat dans $i" | nl
wait
find . -type f | grep -Ril "$*"
fi
done
}
Mais ca me relance
find . -type f | grep -Ril "$*"
entre chaque résultat de la première commande !!!
Exemple :
]$ greptout rasoir
1 resultat dans ./test.odt
rasage.md
Scrip VVL.md
Etude MVP Pack.md
Test.txt
rasage1.md
1 resultat dans ./test1.odt
rasage.md
Scrip VVL.md
Etude MVP Pack.md
Test.txt
rasage1.md
J'ai tenté && et ; mais je ne trouve pas !
Comment lancer la seconde recherche une fois la première complètement terminée ?
Re: Créer une fonction bash avec deux commandes
Publié : 17 fév 2018, 18:08
par lemust83
Bonjour.
Je pencherais pour une boucle type if<-->fi ou encore case in <-->esac.
Je les ai utilisées dans
easy2chroot.
Re: Créer une fonction bash avec deux commandes
Publié : 17 fév 2018, 19:40
par papajoke
tu ajoutes a ton find iname ".md et ...", puis
un case ou if du
type du document :
type=$(file "$fichier")
if [[ "${type}" =~ OpenDocument ]] ; then
# dezip
# grep
else
# grep
fi
ou sinon, tu ajoutes ta commande juste après la boucle find "oo docs"
Re: Créer une fonction bash avec deux commandes
Publié : 17 fév 2018, 21:24
par nam1962
Je vais essayer...
Y ai passé l'aprem sans le moindre résultat !
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 20:25
par nam1962
Bon, ok, je reprend tout à la base pour être un peu moins quiche (ce que je sais faire c'est côté UX pas côté script)
Donc :
~]$ sudo apt update
sudo: apt : commande introuvable
Après vérif :
Bref, faut tout vérifier dans mon script.
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 20:28
par lemust83
apt update
Il n'y a rien qui te choque
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 20:36
par nam1962
Pas du tout : c'est pour te montrer où j'en suis niveau bash (donc script... :/ ) !
J'ai aussi compris çà :
~]$ sudo pacman -Sy
:: Synchronisation des bases de données de paquets...
core est à jour
extra est à jour
community est à jour
multilib est à jour
Confirmé par :
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 20:44
par lemust83
"Commande introuvable" veut dire que la commande n'est pas dans le path. Je pars du principe que tu es sous une machine Debian, donc logiquement , ce devrait être apt-get
et non apt
.
Si tu es sous Arch ou Manjaro, apt ou même apt-get n'existent tout simplement pas.
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 20:49
par nam1962
~]$ lsb_release -a
LSB Version: n/a
Distributor ID: ManjaroLinux
Description: Manjaro Linux
Release: 17.1.5
Codename: Hakoila
Mais tu n'as pas tout lu de mes posts
Ce que je voulais y dire est que mes questions originelles proviennent d'une bonne méconnaissance du scriptage. Trouver des commandes utiles comme
je sais faire, combiner çà en bash, je sèche un peu.
Sinon pour te rassurer, sur mes autres ordis, j'ai effectivement une debian testing et une Xubuntu devel (les deux n'utilisent plus que apt -->
https://dolys.fr/forums/topic/commandes ... s-apt-get/ )
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 21:17
par lemust83
Si, j'ai ( bien ) lu ton post, et j'avoue que ce n'est pas facile de comprendre ce que tu cherches...
echo $?
est sensé donner l'état d'un processus récent me semble t'il.
Donc si le processus est sans erreur, ou du moins avec un comportement attendu, le retour est <0> .
Tu parles d'un enchaînement de commande dans un script, et avec un apt qui déboule, je me pose des questions légitimes
Dans celui que je propose en exemple, ce qui n'est pas une référence, je déclare les fonctions() puis un simple appel les enchaîne une fois les fonctions déclarées.
Fonction1()
{code bash}
fonction2()
{code...}
fonction3()
{code...}
fonction1
fonction2
fonction3
Exit
Re: Créer une fonction bash avec deux commandes
Publié : 21 fév 2018, 22:14
par papajoke
désolé, je pensais que c'était ton code donc je ne comprenais pas trop ta question.
Le plus simple comme dit dans ma réponse tu fais ta seconde requete grep après la boucle que tu as récupérée (pas testée).
find . -type f \( -name "*.od*" -or -name "*.docx" \) | while read i ; do
# recherche des documents office
....
done
# maintenant recherche des documents NON office
find . -type f -not -iname "*.od*" -not -iname "*.docx" | grep -Ril "$*"
en clair ton script faisait :
chercher tout document office,
pour chaque réponse
dezipper le fichier
si fichier bien dézippé (retour = 0)
alors grep paramètres de la fonction dans ce fichier
# tu avais inséré dans cette bouche faire recherche de tout fichiers
fin de recherche office
# moi je déplace "simplement" ta 2eme recherche après la boucle
Re: Créer une fonction bash avec deux commandes
Publié : 22 fév 2018, 07:26
par nam1962
Arf !
Merci, c'est transparent ! Et je suis une bille de ne pas avoir compris ma boucle !
Avec Echo $? je cherchais un moyen de voir si la commande était terminée avec succès, mais j'airai sûrement continué à tourner en rond !