Comment démarrer la première commande de la liste imprimée par la commande 'history | grep quelque chose '

2

Par exemple, j'ai la sortie suivante de la commande:

loom@loom:$ history | grep MAKE
  219  ../build.sh -DCMAKE_BUILD_TYPE=Debug ..
  909  history | grep MAKE

Comment écrire une commande, qui lance la première commande de la liste? De plus, j'aimerais savoir comment lancer la n-ième commande à partir de la sortie de history | grep something?

Métier à tisser
la source
1
Vous savez que vous pouvez les relancer comme ça !219, non?
slm

Réponses:

2

Voir ces chiffres sur la gauche de la sortie? Vous pouvez les utiliser pour faire référence à cette commande avec le développement de l'historique du shell. ![number]dans la plupart des coquillages.

Cela fonctionne à la fois dans bashet zsh:

$ echo "hello"
hello
$ history | grep hello
 5057  echo "hello"
$ !5057
echo "hello"
hello
$
Anko
la source
2

Pas une solution très élégante mais fonctionne.

i=5  # Execute 5th command from the beginning of history
`history | sed -n "${i}p" | sed 's/^.\{7\}//'`
unxnut
la source
0

la petite fonction bash suivante devrait faire ce que vous voulez dans de nombreux cas.

usage: nthhist 3 MAKEexécutera la 3ème commande qui contenait MAKE.

remarque: cela ne fonctionnera pas si la commande trouvée de cette façon n'est qu'un bash-internal

nthhist() {
  local NTH
  NTH=$1
  shift
  history \
  | grep -v "nthhist" \
  | grep "$@" \
  | head -${NTH} | tail -1 \
  | while read id cmd
  do
    $cmd
  done
}
umläute
la source