2010-11-18 5 views
0

J'ai une commande comme celui-ci dans mon histoire (shell bash Linux):de commande shell historique

1119 for dir in `ls -d MyMod.*`; \ 
    do echo $dir; \ 
svn copy --parents $dir $REPO/tags/MyMod_20101115/$dir -m"MyMod tag for 20101115"; \ 
done 

où 1119 est le numéro de commande.

(Notez que la commande est en réalité sur une seule ligne et ne contient pas de caractères \. Je viens de mettre ceux pour le laisser tenir sur la page ici)

Y at-il une seule ligne vous pouvez utiliser pour modifier ce qui précède de 20101115 à 20101118 (représentant une étiquette de la date d'aujourd'hui). Évidemment, nous pourrions créer un script pour le faire.

Ce n'est pas une question à propos de SVN. L'exemple ci-dessus est un exemple SVN mais le but de la question est de savoir comment faire la substitution, d'autant plus qu'elle est dans l'historique et utilise un. Nous avons essayé d'utiliser echo! 1119 mélangé avec sed et n'obtenons pas le résultat souhaité.

+0

Je pense que vous cherchez comment extraire certaine ligne de le ~/.bash_history? – ajreal

+0

Modifier la ligne dans l'historique avec substitution et l'exécuter. L'exécution peut être faite avec xargs bien que je devrais enlever le numéro de commande. Effectivement, j'essaie de faire^$ OLDDATE^$ NEWDATE mais pas pour la commande la plus récente. Surpris, c'est plus difficile que je ne l'avais imaginé. – CashCow

Répondre

2

!1119:gs/20101115/20101118

'Expansion Histoire' Voir dans le manuel bash

+0

J'ai testé ceci sur un exemple légèrement différent (en listant simplement le répertoire en changeant le chemin de recherche - car je ne voulais plus créer de nouvelle balise SVN) et cela a fonctionné parfaitement! – CashCow

1

tail +1119 ~/.bash_history | head -1 | sed -e "s/20101115/20101118/g"

ou

history | tail +1119 | head -1 | awk -F" " '{print $3 $4}' | sed -e "s/$OLD/$NEW/g"

+1

~/.bash_history n'est pas mis à jour lors d'une session bash. Je suggère 'histoire | awk 'NR = 1119' | sed ... ' – Benoit

+0

Ceux-ci ne fonctionnent pas: le dernier est juste sortie toute l'histoire avec la substitution. Même si je le réduis par grep, je reçois toujours la commande la plus récente, c'est-à-dire celle que je viens d'appeler, et j'ai toujours le préfixe (1119) donc je ne peux pas le xargs. – CashCow

1
fc -s 20101115=20101118 1119 
+0

J'ai testé cette solution et cela fonctionne aussi. Je ne pense pas que je puisse avoir 2 réponses acceptées, mais je vous ai donné un +1. – CashCow