Postez ici vos trucs & astuces.
Répondre

personnalisation de ses commandes console

#1Messageil y a 3 ans

Personnalisation extrême de ses commandes console

Nous connaissons les alias et c'est généralement pas trop mal. Mais il est aussi possible de faire beaucoup plus : personnaliser les commandes existantes !
Tout simplement en changeant ou créant de nouvelles options à celles existantes. En d'autres termes on place l'alias à l'intérieur de la commande :confus:
Attention ceci peux être dangereux si l'on ne sait pas trop ce que l'on fait :siffle

Puisque nous sommes sous Manjaro, je pense en premier lieu à "pacman", ajouter une option "-maj" ou une commande "maj" :bon: et cerise sur le gâteau plus de sudo à taper :

pacman --maj
pacman maj


il suffit de créer un alias "pacman" qui va pointer vers notre propre fonction "_pacman"

function _pacman(){
   if [[ "$1" == "maj" || "$1" == "-maj" || "$1" == "upgrade" ]]; then
      (($EUID != 0)) && csudo='sudo' || csudo=''
      $csudo /usr/bin/pacman -Syu
   else
      /usr/bin/pacman $@
   fi
}
alias pacman="_pacman"

code à placer dans votre ~/.bashrc (ou ~.zshrc)


Et il est possible de l'étendre à l'infini ( :maisnon: ), par exemple, on ajoute "info" , "lister" et "éxécutable :rigole: ":

function _pacman(){
   if [[ "$1" =~ maj$ || "$1" == "upgrade" ]]; then
       (($EUID != 0)) && csudo='sudo' || csudo=''
      echo "Mise à jour de ma distribution"
      $csudo /usr/bin/pacman -Syu || yaourt -Sua
   elif [[ "$1" == "-aur" ]]; then
      yaourt -Syua && yaourt -Sua --devel
   elif [[ "$1" == "-info" ]]; then
      /usr/bin/pacman -Qi "$2"
   elif [[ "$1" == "-lister" ]]; then
      echo "liste des fichiers dans le paquet $2"
      /usr/bin/pacman -Ql "$2"
   elif [[ "$1" == "-éxécutable" ]]; then
      echo "liste des exécutables (sans 2é) présents dans ce paquet"
      /usr/bin/pacman -Ql "$2"  | grep -v "/$" | grep "/usr/bin/"
   else
      /usr/bin/pacman $@
      if [[ "$1" == "-h" ]]; then
         echo "-- options personnelles:"
         echo -e "\t-aur : mise à jour des paquets aur"
         echo -e "\t upgrade : mise à jour de la distribution"
         echo -e "\t -éxécutable : rechercher les exécutables dans le paquet"
         #echo -e "\t -papa : rechercher le paquet qui a installé ce fichier (-Qo)"
      fi
   fi
}
alias pacman="_pacman"
note: $1 c'est le premier paramètre passé à la commande et $2 c'est le second.
et avec l'option -h nous avons même nos propres commandes/options :aime:
ps: case is better than elseif

------------------------------------------------
personnellement je n'ajoute pas ce code à .bashrc mais un autre fichier ~/.config/bash.plugins et ajoute uniquement une ligne dans mon ~/.bashrc (pour les alias aussi)

[ -r ~/.config/bash.plugins ]] && source ~/.config/bash.plugins
[ -r ~/.config/bash.alias ]] && source ~/.config/bash.alias


------------------------------------------------
cadeau, un 2ème "plugin" qui ne sert à rien mais qui nous montre qu'il est aussi possible d'agrémenter la sortie standard avec un réaménagement et de la couleur.

function _alias(){
   if [ -n "$1" ]; then
      alias $@
   else
      alias | awk -F'=' '{print " \033[33m" $1 "\033[0m = " $2}'
   fi
}
alias 'alias'="_alias"

------------------------------------------------
il ne reste plus que journalctl à faire ... :rire vous avez la recette, maintenant c'est une question d'imagination
Dernière modification par papajoke le 04 Nov 2015, 19:10, modifié 3 fois.

personnalisation de ses commandes console

#2Messageil y a 3 ans

c'est marrant comme on utilise tous notre terminal de façon différente...
perso je n'utilise aucun alias et je préfère taper les options de mes commandes; en revanche, je me sers beaucoup de l’auto-complétion (toujours un doigt sur TAB) et je joue pas mal avec l'historique, et le glisser déposer de Thunar vers le terminal (pour éviter de saisir les chemins longs).

personnalisation de ses commandes console

#3Messageil y a 3 ans

@Loubrix
je te rassure je connais toutes ces options (de pacman) par cœur. j'ai presque poussé à l'absurde d'extension de pacman :clindoeil: , il faut juste retenir qu'il est aussi possible d'insérer ces alias à l'intérieur de la commande "difficile" .

De plus, l'exemple de alias montre que l'on peut aussi n'ajouter aucune commande mais simplement modifier la sortie pour quelle soit plus agréable pour nous.

autre exemple (si l'on passe aucun paramètre, il m'aide):

function _ln(){
   if [ -n "$1" ]; then
      ln $@
   else
      echo -n "Nom du dossier/fichier source existant: "; read source
      if [[ -f "$source" || -d "$source" ]]; then
         echo -n "Nom du lien vers ce fichier: ";read lien
         echo "ln -s $source $lien" # pour que ca rentre ;)
         ln -s $source $lien
      else
         echo "erreur fichier inexistant !"
      fi
   fi
}
alias ln="_ln"
Dernière modification par papajoke le 12 Nov 2015, 13:06, modifié 1 fois.

personnalisation de ses commandes console

#4Messageil y a 3 ans

'LLo papajoke,

Ouaip, mais faut connaitre le bash dans le texte, pfuuu..
J'ai un usage + simple de l'histoire dans mes isos en post-installation (& en option):

alias lastE='cd /var/cache/pacman/custom && sudo pacman -U *.tar.xz && sudo repo-add custom-repo.db.tar.gz *.tar.xz'

Il installe les derniers paquets stables de E intégrés qui marchent comme un charme (j'sais pas ce qu'ils attendent chez Arch pour les envoyer, ils sont déjà chez opensuze & gentoo !) & déclare le dépôt local pour que pacman les voit.
& comme j'en ai mis tellement plein d'autres + courants, je les ai sorti de bashrc (qui me semblait devenir un brin poussif) avec ça à la place (que j'ai trouvé chez pcilnuxOs):

if [ -f ~/.alias/bash-alias ]; then
    . ~/.alias/bash-alias
fi

personnalisation de ses commandes console

#5Messageil y a 3 ans

Salut fassil
fassil a écrit :avec ça à la place (que j'ai trouvé chez pcilnuxOs):

if [ -f ~/.alias/bash-alias ]; then
    . ~/.alias/bash-alias
fi

c'est presque bon :rire le problème c'est le choix du dossier .alias, ce n'est pas standard et pas logique; nous avons un dossier .config qui est fait pour cela (ou utiliser a la limite ~/.bash-alias si qu'un seul fichier).
si plusieurs c'est alors ~/.config/alias/
papajoke a écrit :personnellement je n'ajoute pas ce code à .bashrc mais un autre fichier ~/.config/bash.plugins et ajoute uniquement une ligne dans mon ~/.bashrc (pour les alias aussi)

[ -r ~/.config/bash.plugins ]] && source ~/.config/bash.plugins
[ -r ~/.config/bash.alias ]] && source ~/.config/bash.alias

je fais exactement comme toi mais en une ligne ( en bash "source" est égal à '.' )

------------------
pour ton lastE, je ne comprend pas le pourquoi d'un alias (mais je sais que tu les :aime: )... l'utilisateur va faire cette commande qu'une seule fois ! faire un alias à usage unique :confus:
Rien ne t’empêche de créer un bash et de le sauvegarder dans ...[local]/bin/ en exécutable
fichier .../local/bin/lastE

#!/usr/bin/env bash
cd /var/cache/pacman/custom && sudo pacman -U *.tar.xz && sudo repo-add custom-repo.db.tar.gz *.tar.xz && sudo rm "$0"

# il s'auto supprime uniquement si tout est ok... ?(je sais que tu fais la chasse aux octects :clindoeil: ) et ça évite la grosse cata si il est relancé dans 3 mois!, reste le rm -rf /var/cache/pacman/custom qui peut sans doute être ajouté.

De plus je crois comprendre que c'est uniquement pour installer les paquets aur juste après installation. Il n'existe pas dans E un dossier ~/.config/autostart/ ? qui lancerait la super console E avec en paramètre terminology "bin/lastE". Ce bash qui pourrait à la fin supprimer aussi le lanceur dans ~/.config/autostart/

personnalisation de ses commandes console

#6Messageil y a 3 ans

'LLo papajoke,

Ouaip, alors l'argument standart/logique dans le merveilleux monde du libre avec "trouzemille" déclinaisons de tout sur un noyau commun à la base, tuwoa !
+ séieusement, je comprends moyen le milieu de ta réponse (relue trois fois mais je suis nul en bash :snif ) & pour la fin:
Les alias "one-shot" sont documentés en tant que tels dans le bashrc & dans un fichier/todo annexe + clair (genre à supprimer après usage) que l'on peut consulter avec un alias..
Les derniers paquets de E (qu'ils définissent chez E comme stables) ne sont pas dans AUR, mais compilés par mes soins, & optionnels bien que pour terminology en particulier, cela résolve un/deux p'tits bugs de prompt invisible à l'ouverture & de copier/coller fluctuant (mais ils n'ont pas du s'en apercevoir encore chez la maison-mère !).

personnalisation de ses commandes console

#7Messageil y a 3 ans

fassil a écrit :Ouaip, alors l'argument standart/logique dans le merveilleux monde du libre avec "trouzemille" déclinaisons de tout sur un noyau commun à la base, tuwoa !

Libre ne veut pas dire bordel ;rale: surtout qu'un problème de linux est que nous avons déjà beaucoup trop de répertoires.
Perso j'ai .bashrc,.zshrc, .conky dans ~/config et fait des liens vers ~/ ; cela me permet d'avoir une seule entrée pour pouvoir sauvegarder ma config.

fassil a écrit :Les alias "one-shot" sont documentés en tant que tels dans le bashrc & dans un fichier/todo annexe + clair (genre à supprimer après usage) que l'on peut consulter avec un alias..

je me répète, tu détournes les alias, Les alias "one-shot" n'existent pas tu fais un script !

Pour transformer un alias en script : juste ajouter une ligne au début: #!/usr/bin/env bash et sauvegarder le fichier avec des droits exécutable(chmod)
/usr/local/bin/ pour mettre tes propres scripts; $HOME/bin ou $HOME/.local/bin en fonction de ce que tu as défini dans ton .bashrc (perso c'est ~/.local/bin car un dossier de moins dans mon home)

fassil a écrit :je comprends moyen le milieu de ta réponse (relue trois fois mais je suis nul en bash :snif )
Il me semble que tu n'es pas nul en console ... et programmer en bash c'est simplement le shell (la console)
en plus on utilise des variables spécifiques en plus de celles d'environnement (ici tu comprends mon rm "$0" :clindoeil: ) pas de quoi avoir mal à la tête. Et plus compliqué, faire une condition if et savoir faire des tests .Point final, cela est suffisant dans 70% des cas. Le plus dur en programmation bash c'est connaitre les commandes externes au shell (donc maîtriser la console)!

Et rien ne t’empêche d'ouvrir un sujet dans un forum.

fassil a écrit :Les derniers paquets de E (qu'ils définissent chez E comme stables) ne sont pas dans AUR, mais compilés par mes soins, & optionnels bien que pour terminology en particulier, cela résolve un/deux p'tits bugs de prompt invisible à l'ouverture & de copier/coller fluctuant (mais ils n'ont pas du s'en apercevoir encore chez la maison-mère !).

Donc la bonne solution c'est bien le bash, il faut absolument tester si le paquet made in fassil n'as pas été déjà installé (pacman -Qi ...) et si non alors proposer l'installation et si oui des rm a tout va :rire (en bash c'est juste un if avec un test) c'est presque ce que fait manjaro-system ! par exemple :

   version=pacman -Q terminology | cut -d' ' -f 2 | sed -e 's/\.//g' | sed -e 's/\-//g'
   echo "terminology $version"
   if (( $version < 4278 )); then
      pacman --noconfirm -U  *****
      rm "$0"
      # nettoyer ton bach-alias avec sed (sed est un éditeur de texte, c'est pas du shell)
   else
      if (( $version == 4299 )); then
         echo "vous avez la version fassil d'installée"
      else
         echo "la version de terminology est suppérieure, donc on ne fait rien (E a déjà corrigé le problème)"
      fi
   fi

:idee::idee::idee:
tu pourrais te faire un fassil-system dans aur qui reprend exactement la même utilité que manjaro-system donc les maj/patch seraient faits par aur et donc ce que ne fait pas calamare , fassil-system le fait et ca te donne un moyen en plus que faire de la maintenance "E" sur tes distributions déjà installées.

Répondre