Forum Astuces.divers [Terminal] ! en shell

Posté par .
Tags : aucun
1
10
sept.
2004
Le ! en shell permet plein de trucs sympa.
  • !! refait la dernière commande
  • !cmd refait la dernière commande commençant par cmd
  • !cmd:p permet de visualiser sans éxecuter la dernière commande commençant par cmd
  • !$ est le dernier mot du ligne de commande précédent
  • !cmd:$ est le dernier mot du dernier ligne de commande commençant par cmd
  • !* est l'ensemble de la dernière ligne de commande à part le premier mot
Pourquoi ce dernier est-il utile? Pense à ceci :
$ convret -size 120x120 input.png -resize 120x120 -draw "gravity southeast text 0,0 'Dave Neary'" output.jpg
bash: convret: command not found
$ convert !*
  • # Delire le multi-utilisateur...

    Posté par (page perso) . Évalué à -1.

    Maintenant, amuses toi a le faire sur une machine avec plusieurs users qui travail avec le meme compte en meme temps, ca peut etre tres drole...
    • [^] # Re: Delire le multi-utilisateur...

      Posté par (page perso) . Évalué à 2.

      Maintenant, amuses toi a le faire sur une machine avec plusieurs users qui travail avec le meme compte en meme temps, ca peut etre tres drole...

      C'est quoi l'interet de faire ca aussi ? D'avoir plusieurs users, qui partagent le meme compte ... Si ce n'est qu'une question de partage de donnees, un peu de liens symboliques depuis leurs $HOME respectifs devraient suffir.
    • [^] # Re: Delire le multi-utilisateur...

      Posté par (page perso) . Évalué à 3.

      D'abord plusieurs users sur le même compte c'est pas franchement courant, ensuite c'est local au shell en cours...
      • [^] # Re: Delire le multi-utilisateur...

        Posté par . Évalué à 2.

        D'abord plusieurs users sur le même compte c'est pas franchement courant


        Et c'est surtout franchement une bêtise ! Un utilisateur, c'est censé être unique. Même plusieurs admins sur le compte root ! Le recours au shell root devrait déjà être en lui même suffisamment occasionnel pour que deux admins ne se marchent jamais sur les pieds. Si on se retrouve dans une situation qui met en échec les facilités du bash, c'est que l'on administre sa machine comme un Windows.
    • [^] # Re: Delire le multi-utilisateur...

      Posté par (page perso) . Évalué à 3.

      Tu vas apprendre un truc mais le bash_history est lu au lancement du shell et ecrit à la fermeture :) Donc, ca change rien ;)
      • [^] # Re: Delire le multi-utilisateur...

        Posté par . Évalué à 1.

        c justement de ca dont il parle.
        imaginons quelqu'un qui fait un rm -rf * dans un repertoire bidon.
        il se deconnecte => ca se retrouve dans le .bash_history
        toi t'arrives tu te logges, ca recharge le .bash_history. tu es dans ton repertoire home et tu te dis ouais je vais rebooter, je fais un !r. et ben tu l'as dans le cul... bon j'avoue mon exemple est bidon mais bon... c'est pour expliquer le principe.
        • [^] # Re: Delire le multi-utilisateur...

          Posté par (page perso) . Évalué à 2.

          imaginons quelqu'un qui fait un rm -rf * dans un repertoire bidon.
          Si c'est un utilisateur, aucun intérêt à utiliser le même compte.
          Si c'est le root, alors
          1/ Tu peut utiliser le sudo qui conserve les commandes des utilisateurs dans leurs bash_history respectifs
          2/ En root, tu ne fais pas rm -rf ! D'ailleurs quand j'installe ma Debian, le bashrc root contient la ligne "alias rm='rm -i'". Je pense ne pas trop m'avancer en disant que ce doit être pareil dans pas mal (toutes) de distribs.
          2Bis/ En root, tu ne fais pas non plus !cmd sans être sûr de toi !
          3/ C'est dans cette situation que la ligne
          !cmd:$ est le dernier mot du dernier ligne de commande commençant par cmd
          prends tout son sens. ;)
    • [^] # Re: Delire le multi-utilisateur...

      Posté par . Évalué à 1.

      Plusieurs utilisateurs sur un même compte ?

      Tu as déja utilisé un quelconque shell ???

      De un, plusieurs utilisateurs sur un même compte c'est tres tres tres rare et ca ne devrait jamais arriver.

      Deux, c'est basé sur l'historique des commandes qui, tant que tu es dans le shell n'est valable que pour ta session, donc transparent pour "plusieurs users qui travail avec le meme compte"

      Ta remarque est un peu à coté de la plaque.
    • [^] # Re: Delire le multi-utilisateur...

      Posté par . Évalué à 1.

      Ca ne marche pas, le bash_history est chargé en mémoire durant son utilisation et ensuite quand bash est coupé il est enregistré sur le disque. Donc pas de risque, les devs de bash ont tout pensé :)
  • # Mauvais exemple :-)

    Posté par (page perso) . Évalué à 2.

    plutot que de taper "convert !*" en sachant qu'il y a 90% de chance de refaire la même faute de frappe, ca va plus vite de faire "haut" "home" "droite"*5 Ctrl+T :-)
    Et puis bon, doit y avoir des moyens encore plus rapides.
    • [^] # Re: Mauvais exemple :-)

      Posté par . Évalué à 0.

      un autre moyen :
      ^ret^ert
    • [^] # Re: Mauvais exemple :-)

      Posté par . Évalué à 1.

      Pour moi "convert !*" va plus vite : y'a pas besoin de déplacer la main droite jusqu'aux flèches.
      Et pour les "90% de chances de refaire la même faute de frappe" je demande à voir les sources de cette statistique ! :)
      • [^] # Re: Mauvais exemple :-)

        Posté par (page perso) . Évalué à 2.

        Une bonne habitude consiste à taper TAB à chaque commande (ou même avant pour gagner un peu de temps). L'autocomplétion te met les noms disponibles ou un espace après ce que tu tapes si tu ne t'es pas trompé.

        Ça parait futile comme ça, mais c'est assez utile en prod.

        Et bon, la personne qui se trompe une première fois fait attention la deuxième. Et un appui sur TAB ne coûte pas cher.
  • # version interactive

    Posté par . Évalué à 1.

    J'aurais tendance à préférer l'utilisation du ctrl-r qui permet de voir la commande qui va opérer plutôt que le ! qui est un peu opaque.
    L'autre avantage est de pouvoir remonter à plusieurs commandes en arrières.
  • # Zsh OwnZ

    Posté par . Évalué à 1.

    D'une part il me semble que les combinaisons ! (ne) fonctionne (que) sous bash.

    et sinon quand on utilise le bon shell (Zsh) ca donne :

    [rabbit speedball] convret -size 120x120 input.png -resize 120x120 -draw "gravitysoutheast text 0,0 'Dave Neary'" output.jpg
    zsh: correct 'convret' to 'convert' [nyae]?

    :D
    • [^] # Re: Zsh OwnZ

      Posté par (page perso) . Évalué à 1.

      En meme temps, le "bon shell"[ (tm)(c)(r) :) ] moi il me fait plutot chier avec ses correct, il ne verifie pas auparavant qu'il existe un executable avec le nom tapé, aussi il te propose de corriger alors que il n'y a pas besoin.
      Et quand c'est une commande que tu repete ca devient vite lourd ...
    • [^] # Re: Zsh OwnZ

      Posté par (page perso) . Évalué à 1.

      dans mon zsh a moi, ! existe et marche a peu pres comme decrit ci dessus, sauf que je ne fais jamais !bi-Entree, mais !bi-tab histoire de voir ce que c'etait la derniere commande bidule (et si c'est pas la bonne, controle-R...)

      Mais je ne connaissais pas tous ces !*, !$... sympa (dur de perdre l'habitude du 0cwconvert pour corriger, mais un jour peut etre...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.