Je ne sais pas comment formuler cela, mais je me retrouve souvent à taper des commandes comme celle-ci:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
Habituellement, je tape simplement le chemin deux fois (avec la tabulation terminée) ou je copie et colle le chemin avec le curseur. Existe-t-il un bashfoo qui facilite la saisie?
bash
command-line
clipboard
line-editor
user1028270
la source
la source
bash-fu
:)Réponses:
Il y a un certain nombre d'astuces (il y en a un double je pense), mais pour cela j'ai tendance à faire
qui est étendu à votre commande.
Ceci est connu sous le nom d' expansion d'accolade . Dans le formulaire utilisé ici, l'
{}
expression spécifie un certain nombre de chaînes séparées par des virgules. Ceux-ci "développent" l'/etc/prog/dir1/myconfig.yml{,.bak}
expression entière , remplaçant la{}
partie par chaque chaîne à son tour: la chaîne vide, donnant/etc/prog/dir1/myconfig.yml
, puis.bak
donnant/etc/prog/dir1/myconfig.yml.bak
. Le résultat estCes expressions peuvent être imbriquées:
produit
Il existe une variante utilisant des nombres pour produire des séquences:
produit
et vous pouvez également spécifier l'étape:
produit
la source
.bak
.L'expansion de l'historique peut être utile pour ce genre de chose (en supposant que l'historique bash est activé).
Dans votre exemple, vous pourriez faire:
Ici, le
!#
fait référence à la ligne actuelle,!#:1
fait référence au paramètre 1 sur la ligne actuelleet
!#:1.bak
fait référence au paramètre 1 sur la ligne actuelle avec '.bak' collé à la fin.Lorsque vous avez tapé le spécificateur d'historique, vous pouvez utiliser Ctrl+ Alt+ Epour le développer à sa valeur réelle si vous voulez par exemple revérifier ou modifier le nom de fichier.
La section "History Expansion" des pages de manuel de bash contient plus d'informations.
la source
Semblable à la réponse de progo, mais un peu plus simple:
C-w
coupe («tue») le mot à gauche du curseur, l'C-y
insère («tire») à nouveau.la source
Vous pouvez également couper-coller (kill-yank en termes emacs / bash) à partir de la ligne de commande pour dupliquer les parties à modifier.
M-d
tue vers l'avant jusqu'à la limite du mot, et vous pouvez tuer le texte plusieurs fois et ils sont tous concaténés ensemble en une seule «pâte» pour le tirage. Pratique!Ramenez tout cela à la ligne de commande au curseur par
C-y
. Donc, si vous avez une ligne comme celle-ci (l'élément de bloc █ indique la position du curseur):Dans les deux cas, vous préférez le faire, vous familiariser avec ce que bash a à offrir dans le département clé interactif sera bénéfique. http://web.mit.edu/gnu/doc/html/features_7.html
la source
Dans
tcsh
ouzsh
, Alt+Ctrl+_enemacs
mode (copy-prev-word
widget) insère le dernier mot, doncbash
a uncopy-backward-word
widget (qui n'est lié à aucune touche par défaut) mais qui copie uniquement le mot dans le tampon en anneau, vous devez également appuyer sur Ctrl-Y(enemacs
mode) pour le retirer. Mais vous pourriez faire:Pour Alt+Ctrl+_faire à la fois le copier / snarf et coller / yank comme dans
tcsh
/zsh
.la source