Enregistrer la commande dans l'historique sans l'exécuter dans bash

8

Existe-t-il un moyen de sauvegarder une commande dans l'historique bash sans l'exécuter? par exemple

$ cmd [a long list of arguments] 

et maintenant pendant la frappe, je me souviens que je voudrais faire autre chose en premier. Puis-je avoir quelque chose comme

$ cmd [a long list of arguments][some-key-strokes]

et cela ne s'exécute pas réellement mais entre dans l'historique de bash pour que je puisse l'utiliser plus tard?


la source
5
Dans cette situation, je préfixe simplement la ligne avec #, puis appuyez sur Entrée.
Oliver Charlesworth

Réponses:

5

Il peut y avoir un meilleur moyen, mais vous pouvez utiliser le :pmodificateur de l'expansion de l'historique pour imprimer la ligne de commentaire actuelle sans l'exécuter. !#est la ligne actuelle, et %en elle-même ne correspondra à rien

$ cmd [arguments] !#%:p
Pilules d'explosion
la source
cool! ;) et sans avoir besoin de s'échapper des caractères spéciaux dans la commande ce qui peut devenir compliqué si la commande n'est pas seulement ls -al+1
cool! très soigné
8

Utilisez l' -soption de la historycommande:

history -s cmd arg1 arg2

L'appel à history -slui-même, commodément, n'est pas ajouté à l'historique des commandes, donc dans votre historique, il semble que vous ayez exécuté cmdsans réellement le faire.

chepner
la source
cool! c'est aussi génial
1

Habituellement, cela se fait par

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Notez que le nom de l'historique peut différer sur votre système. Vous pouvez donc utiliser l' HISTFILEenvironnement var

ce qui rend:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"
hek2mgl
la source
1

Normalement, j'ajoute juste un # au début de la ligne pour transformer la ligne en commentaire:

#cmd [a long list of arguments] 

Je préfère cette façon parce que vous pouvez le faire avec seulement 3 [4 si vous avez besoin de SHIFT pour insérer #] touches

^a#<ENTER>

^ a va au début de la ligne actuelle

# ajoute le commentaire

ENTER exécute le commentaire

user3726536
la source
0

Vous pouvez essayer d'ajouter un espace et | (pipe) à la fin de la ligne, en appuyant sur Entrée, puis sur Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

La commande sera dans votre historique avec un | à la fin (peut simplement supprimer avec retour arrière) au lieu d'un # au début (potentiellement plus fastidieux à supprimer).

AVERTISSEMENT: Je ne sais pas si cela fonctionne toujours! À utiliser à vos risques et périls!

$ cmd [longue liste d'arguments] |

> Ctrl+C

$ Up

$ cmd [longue liste d'arguments] |

Josiah Krutz
la source
0

Vous pouvez essayer d'utiliser cette ligne:

history -s -p $COMMAND

De help:

The -p option means to perform
history expansion on each ARG and display the result,

Cela signifie que vous pouvez développer des choses comme !!et stocker le résultat au bas de l'histoire.

Felipe Alvarez
la source
history -sa été donnée il y a deux ans dans une réponse. Est-ce que cela -ps'améliore? Que fait -p-il? (Dans la mesure où cela est logique de le faire, vous devez modifier votre réponse pour l'améliorer, et ne pas répondre à mon commentaire par un autre commentaire.)
G-Man dit 'Reinstate Monica'
0

Une autre option consiste à aller au début de la ligne et à faire ce que vous alliez faire suivi de &&, comme

rm old_file && cmd [args]

Donc, si la chose que vous vouliez faire réussit, votre commande s'exécutera immédiatement après, et si elle échoue, votre commande ne s'exécutera pas, mais elle sera dans l'historique. Vous pourriez aussi faire

test && cmd [args]

Étant donné que le test sans args échouera, il s'agit d'une poignée de touches supplémentaires par rapport à la #méthode.

Nickolai
la source