Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

Créer une fonction bash avec deux commandes

#1Messageil y a 7 mois

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 ?
Modifié en dernier par nam1962 le 22 Fév 2018, 07:27, modifié 2 fois.

Créer une fonction bash avec deux commandes

#2Messageil y a 7 mois

Bonjour.
Je pencherais pour une boucle type if<-->fi ou encore case in <-->esac.
Je les ai utilisées dans easy2chroot.

Créer une fonction bash avec deux commandes

#3Messageil y a 7 mois

:salut:
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"

Créer une fonction bash avec deux commandes

#4Messageil y a 7 mois

Je vais essayer...
Y ai passé l'aprem sans le moindre résultat !

Créer une fonction bash avec deux commandes

#5Messageil y a 7 mois

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 :

~]$ echo $?
1
Bref, faut tout vérifier dans mon script.

Créer une fonction bash avec deux commandes

#6Messageil y a 7 mois

apt update
Il n'y a rien qui te choque :lol:

Créer une fonction bash avec deux commandes

#7Messageil y a 7 mois

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 :

~]$ echo $?
0

Créer une fonction bash avec deux commandes

#8Messageil y a 7 mois

"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.

Créer une fonction bash avec deux commandes

#9Messageil y a 7 mois

~]$ 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 :wink:

Ce que je voulais y dire est que mes questions originelles proviennent d'une bonne méconnaissance du scriptage. Trouver des commandes utiles comme

echo $?
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/ )

Créer une fonction bash avec deux commandes

#10Messageil y a 7 mois

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 :wink:
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 

:saispas:

Créer une fonction bash avec deux commandes

#11Messageil y a 7 mois

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

Créer une fonction bash avec deux commandes

#12Messageil y a 6 mois

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 !

Répondre