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

script retourne mes menus en console

#1Messageil y a 8 ans

Un petit script qui permet en console de retrouver les menus/commandes dans le dossier /usr/share/applications/

un seul paramètre :
-c : retourne la liste des catégories, ou
motDeRecherche : retourne la liste des programmes correspondant au mot (dans notre locale)

par exemple :

./apps.sh fire
./apps.sh browser
./apps.sh navigateur
./apps.sh web
./apps.sh video


Image

#!/usr/bin/env bash
# apps.sh
# rechercher une application dans les menus

CG='\033[0m\033[32m'
CE='\033[0m'
CB='\033[1m'
param="$1"

if [[ $param == "-c" ]];then
   lists=''
   for f in $(find /usr/share/applications/ -type f -name "*.desktop" -readable 2>/dev/null); do
      lists="${lists}$(awk -F '=' '/^Categories/ { print $2}' ${f})"
   done
   lists=${lists//;/\\n}
   echo -e "${lists,,}" | sort | uniq -u
   exit 0
fi

lg=$(locale 2>/dev/null | awk -F'=' '/^LANG/ {print $2}')
lg=${lg:0:2}

userdir="$HOME/.local/share/applications/"
[ -d "${userdir}" ] || userdir=''
files=$(find "/usr/share/applications/" "${userdir}" -type f -name "*.desktop" -readable 2>/dev/null| xargs grep -Eisl "^Name(.*)${param}|${lg}(.*)${param}|^Categories(.*)${param}")

doubles='' # avec $HOME
for f in ${files[@]}; do
    basename=$(basename ${f})
   if [[ ! "$doubles" =~ ";${basename}" ]]; then
      echo ""
      awk -F '=' '/^Name=/ { printf "○'$CB' %s '$CE'",$2 }' "$f"
      awk -F '=' '/^Comment\['${lg}'\]/ { printf " %s",$2 }' "$f"
      awk -F '=' '/^Exec/ { printf "\n\t'$CG'%s'$CE'\n",$2 }' "$f"
   #    echo -e "\t${basename}"
      doubles="${doubles};${basename}"
   fi
done

# pas le bon ordre :(
# for f in ${files[@]}; do
#    awk ' BEGIN{printf "\n○ ";FS="="} 
#    {
#       if ($1=="Name") { printf "'$CB' %s '$CE'",$2 }
#       if ($1=="Exec") { printf "\n\t'$CG'%s'$CE'",$2 }
#    }' "$f"
# done

script retourne mes menus en console

#2Messageil y a 7 ans

:bjr:
J'avais mis ce script de côté, et du coup je l'ai zappé :rougir:
Très intéressant :bien
Par contre quand je fais ./apps.sh video , ça me retourne la totalité de ce qui est installé sans restreindre au mot clé "video" . Pas grave, mais il faut chercher...

Edit: Ça foire sur le portable :confus:

[steph@Dell ~]$ ./apps.sh
find: paramètre manquant pour « -name »
Utilisation : grep [OPTION]... MOTIF [FICHIER]...
Exécutez « grep --help » pour obtenir des renseignements complémentaires.
./apps.sh: ligne 30: ^Name(.*)|fr(.*)|^Categories(.*) : commande introuvable

[steph@Dell ~]$ ./apps.sh -c
find: paramètre manquant pour « -name »

[steph@Dell ~]$ ./apps.sh video
find: paramètre manquant pour « -name »
Utilisation : grep [OPTION]... MOTIF [FICHIER]...
Exécutez « grep --help » pour obtenir des renseignements complémentaires.
./apps.sh: ligne 30: ^Name(.*)video|fr(.*)video|^Categories(.*)video : commande introuvable
[steph@Dell ~]$


Le contenu est pourtant le même sur les deux PCs puisque copié ici . :?:

script retourne mes menus en console

#3Messageil y a 7 ans

Trouvé!
Sur la Tour, j'ai copié le code à la souris alors qu'avec le Portable, j'ai utilisé la fonction <Tout sélectionner> de la balise code qui génère des blancs en tête de lignes ce qui pourrait contrarier ton code....
Je l'ai repris à la volée et ça beigne :bien
Répondre