Page 1 sur 1

Changer début ancienne commande linux

Publié : 07 déc 2019, 07:37
par Cyberdr3am
Bonjour,

J'aimerai savoir comment faire pour rapidement prendre l'ancienne commande écrite dans le terminal et de changer juste le début.

Exemple :

mpv manjarobestdistro.mkv

changer mpv par rm ce qui donne

rm manjarobestdistro.mkv

J'aimerai faire cela rapidement sans devoir retourner au début de la commande puis de changer le début.

Merci

Re: Changer début ancienne commande linux

Publié : 07 déc 2019, 07:57
par papajoke
bonjour

si c'est reprendre la dernière commande tu as en bash et zsh !* qui relance tous les paramètres

1) cat fichier.txt -n
2) less !* # va lancer la commande less fichier.txt -n

existe aussi !$ qui ajoute uniquement le dernier paramètre et :^ ajoute uniquement le premier paramètre

Re: Changer début ancienne commande linux

Publié : 07 déc 2019, 08:05
par Cyberdr3am
Merci pour cette explication.

Cependant j'aimerai le faire avec un alias directement ou un petit script pour le faire rapidement.
J'ai voulu le faire avec sed et mettre l'ancienne commande dans un fichier mais c'est trop compliquer.

Par exemple si j'écris old ça me fait l'ancienne commande avec rm devant et ça l’exécute sans rien me demander d'autre.

Merci

Re: Changer début ancienne commande linux

Publié : 07 déc 2019, 09:05
par papajoke
pas compris comment la commande "old" devine qu'il faut remplacer par "rm" :confus: - a moins de l'appeler rmh (remove history -1)

fonction dans bashrc qui devrait te donner une piste pour ce que tu désires (mais qui n'apporte ici rien de plus que la méthode donnée plus haut)

old(){
    declare -a cmd=($(history | tail -n 2 | head -n 1))
    unset cmd[1]
    unset cmd[0]
    params="${@}"
    [ -z "$params" ] && params=("ls") # REMPLACER la commande par défaut par: rm
    echo "old to: $params => ${cmd[*]}"
    ${params[*]} ${cmd[*]}
}
par exemple:
cat fichier.txt
old ls (qui execute ls fichier.txt)
donc , ici, rien de mieux que ls !* ...

Re: Changer début ancienne commande linux

Publié : 07 déc 2019, 15:09
par Cyberdr3am
Merci pour ton aide.

Quand j'utilise ce que tu ma écris j'ai une erreur

old:2: no matches found: cmd[1]
Quand je parle de old je veux parler d'un alias old qui va exécuter une commande par exemple

Re: Changer début ancienne commande linux

Publié : 07 déc 2019, 18:24
par lemust83
Après une modif de ~/.bashrc , il faut ressourcer bash pour que la modif soit prise en compte: lance source .bashrc et réessaye.

Re: Changer début ancienne commande linux

Publié : 08 déc 2019, 01:25
par papajoke
c'est que tu utilises zsh !
commande history est différente (donc autant utiliser fc) et les tableaux zsh ne sont pas compatibles bash

pour .zshrc

old(){
    cmd=($(fc -nl -1))
    shift cmd           # supp le premier élément: la commande
    param="${1:-ls}"    # REMPLACER la commande par défaut par: rm
    echo "old to: $param => ${cmd[*]}"
    ${param} ${cmd[*]}
}

Re: Changer début ancienne commande linux

Publié : 08 déc 2019, 13:39
par Cyberdr3am
PARFAIT ! c'est exactement ce que je voulais faire.
Merci beaucoup

Ps : Oui je suis sur zsh ( source ce fait automatiquement quand je fait des changement dans les fichiers en question avec une petite ligne dans vim )