Je me demandais s'il y avait un moyen rapide d'enregistrer une commande dans le terminal d'Ubuntu. Le scénario est:
Problème:
Je veux pouvoir enregistrer la commande pour une utilisation ultérieure de manière simple qui ne veut pas simplement mettre un #
Avant-le et le mettre dans l'historique des clés de haut en bas. Économisez-la de manière optimale directement à un registre ou au presse-papiers.
J'ai oublié de mentionner que je ne voulais pas écho, non plus.
Vous ne voulez pas préparer echo
(ou toute autre commande de type non op-op) à votre ligne, puisque vous pouvez avoir une redirection d'E/S, et ils seraient toujours exécutés, écrasant potentiellement tout fichier que vous pourriez besoin d'accéder toujours (jusqu'à ce que vous soyez prêt à exécuter votre commande).
Au lieu de cela, allez au début de la ligne et entrez le caractère de commentaire, #
. Ensuite, vous pouvez appuyer sur Enteret la ligne sera enregistrée dans votre histoire.
Si vous êtes en mode VI, KSH et BASH (au moins) ont une commande spécifique pour ceci: Entrez le mode de commande (appuyez sur Esc) Puis appuyez sur la # personnage.
Ceci est spécifiquement pour ce cas d'utilisation. La description de cette commande dans l'O'Reilly apprendre la coquille Korn Book dit:
Prepend # (caractère de commentaire) à la ligne et envoyez-le au fichier d'historique; utile pour enregistrer une commande à exécuter plus tard sans avoir à retaper. Si la ligne commence déjà par un #, retirez le numéro principal et les autres caractères de commentaire suivant les nouvelles lignes dans une commande multiligne.
Si vous exécutez zsh
, vous pouvez utiliser Ctrl-Q, qui exécute la commande Push-line
. Il enregistre ce que vous avez actuellement saisi sur une pile, effacez l'invite, puis sur la pile après avoir entré votre commande suivante. J'utilise cela tout le temps pour exactement la situation que vous décrivez.
Si votre shell est défini sur MODE EMACS (valeur par défaut habituelle pour bash, je crois):
#set -o | grep emacs
emacs on
ensuite vous pouvez:
<Ctrl>a or <arrowkeys> # to go to the beginning of the current line or to wherever you want
<Ctrl>k # to "kill" the content from the cursor position to the end of the line + SAVE it
... here you type the command you forgot to add ...
<Ctrl>y # to "yank" the SAVED line into the current editing line. or <Ctrl>p in ksh(??)
<Enter> # to execute it
#note: you can also replace: <Ctrl>a<Ctrl>k with: <Ctrl>u # kills the whole line + SAVE it
Ceci est très rapide à faire et devient une habitude. CTRL-K peut également être utile pour sauvegarder uniquement la "fin" d'une ligne (par exemple: 2 longues arguments que vous savez que vous réutiliserez plus tard, que vous "tuer" (+ sauvegarde) et que vous pouvez ensuite "yank". retour aussi souvent que vous voulez)
Si votre shell est in VI Mode, vous pouvez utiliser les commandes VIM habituelles:
<Esc> # to go back to normal(command) mode, if you were in editing mode
dd # to delete the whole current line + SAVE it (see note below)
i # to reenter editing mode
... here you type the command(s) you forgot ...
<Esc> # to return to normal mode
p # to paste the buffered line + place the cursor on top of the last character
a # to reenter editing mode past that current character
<Enter> # to execute it
# note: instead of "dd" (kill whole line) you can simulate emacs <Ctrl>a<Ctrl>k with:
# | or h or l # to go to the 1st char of the line or wherever # simulates <Ctrl>a or <arrow keys>
# d$ # to delete from the current position to the end of the line + SAVE it # <Ctrl>k
La contournement qui pourrait fonctionner en fonction du cas.
really long command thigng -flag -flag2
Appuyez sur HOME, entrez une nouvelle commande, puis sur && pour exécuter d'abord, et si vous exécutez le succès de la deuxième fois.
first command && really long command thigng -flag -flag2
Comment ne sera jamais enregistré comme des étapes séparées.
Alternativement:
Si vous avez déjà entré la première commande (comme dans Entrée enfoncée), vous pouvez taper first_command && !!
qui insérera la deuxième commande dans !!
Vous pouvez sélectionner/copier le texte avec l'interface graphique ou les installations de la coque, puis la coller dans un fichier ou tout simplement pas oublier non écrasez-la par une sélection ultérieure (afin que vous puissiez le coller. Le cas échéant), mais je trouve que gênant: la place des lignes de commandement complets est imho dans l'historique de la clé de haut en bas ".
Au lieu d'ajouter un #
au début de la ligne et appuyer sur <Enter>
, vous pouvez créer un clavier qui enregistre la ligne de commande actuelle dans l'historique sans l'exécuter.
Par exemple. avec bash, le liant à Meta/Alt-C
ou Esc-C
(généralement lié à capitalize-Word
dans les contextes EMACS; Utilisez une autre clé si vous l'utilisez déjà):
bind -x '"\ec": history -s "$READLINE_LINE"; READLINE_LINE='
Si vous utilisez le VI-Keybindingings, vous pouvez accroupir l'inutilisé ^G
pour ça:
bind -x '"\C-g": history -s "$READLINE_LINE"; READLINE_LINE='
Cela effacerait également la ligne après; Si vous ne voulez pas cela (et que vous préférez annuler manuellement la ligne avec par exemple. ^C
), omettre le READLINE_LINE=
.
Plutôt que de traiter avec divers raccourcis de clavier de lecture ésotériques, vous pouvez modifier directement le fichier d'historique de votre shell. Avec Bash:
history -w
(Affleurez l'histoire existante)$EDITOR $HISTFILE
(Modifiez votre fichier d'historique (~/.bash_history
par défaut) et faire les changements que vous voulez)history -c ; history -r
(Effacez l'historique en mémoire de votre coquille et rechargez-le à partir du fichier d'historique)Depuis que j'aime beaucoup faire des ajustements à mes antécédents de Bash, j'ai écrit une fonction bash pour le rendre plus pratique:
histedit()
{
# Flush history.
history -w
# Open an editor at the last line. Pipe the file into `wc` to suppress
# printing the filename.
#
# Note that some versions of `wc` (e.g. BSD) do not support long options
# and print with leading spaces.
last_line=$(wc -l < "${HISTFILE}")
last_line=$(( "${last_line}" ))
"${EDITOR}" "+${last_line}" "${HISTFILE}"
# Reload the history file.
history -c
history -r
}
J'ai en outre ne fonction de bash distincte pour effectuer une recherche rapide et remplacer sur mon historique Bash pour corriger et réexécuter les commandes dactylographes.
Si vous avez déjà tapé la deuxième commande, allez au début de la ligne, tapez la première commande, puis un point-virgule pour séparer les deux. C'est si le succès n'a pas d'importance. Si cela importe, le && quelqu'un d'autre a suggéré.