Nous savons tous comment utiliser <ctrl>-R
pour inverser la recherche dans l'historique, mais saviez-vous que vous pouvez utiliser <ctrl>-S
pour transférer la recherche si vous le définissez stty stop ""
? De plus, avez-vous déjà essayé d'exécuter bind -p pour voir tous vos raccourcis clavier répertoriés? Il y en a plus de 455 sur Mac OS X par défaut.
Quelle est votre astuce obscure, raccourci clavier ou configuration shopt la plus préférée avec bash?
bash
command-line
Robert Harvey
la source
la source
Réponses:
Renommer / déplacer rapidement des fichiers avec des suffixes:
cp /home/foo/realllylongname.cpp{,-old}
Cela s'étend à:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
la source
C'est l'équivalent en ligne de commande du bouton Précédent (vous amène au répertoire précédent dans lequel vous étiez).
la source
pushd
etpopd
maintenir moi-même une pile de répertoires.man cd
ou,cd --help
(du moins le mien).Un autre coup de coeur:
Répète votre dernière commande. Le plus utile sous la forme:
la source
mkdir testdir; cd !$
.. Ceci s'exécutecd [last word of previous line]
(dans l'exemple,cd testdir
)Mon préféré est '^ string ^ string2' qui prend la dernière commande, remplace string par string2 et l'exécute
Guide de l'historique de la ligne de commande Bash
la source
!!:gs/ehco/echo/
!!:gs/ehco/echo/
effectue une recherche globale et remplace sur la dernière commande (conférence!!
sur stackoverflow.com/questions/68372/… ). Ce n'est pas équivalent à^ehco^echo
qui remplace simplement une instance de "ehco" - une réponse plus précise serait!!:s/ehco/scho
.Renommer
Exemple:
Tellement utile
la source
Je suis fan de
!$
,!^
et!*
expandos, qui reviennent de la ligne de commande soumise la plus récente: le dernier élément, le premier élément non commandé et tous les éléments non commandés. À savoir (notez que le shell imprime d'abord la commande):Cela est très pratique lorsque vous, par exemple
ls filea fileb
, et que vous voulez modifier l' un d'entre eux:vi !$
ou les deux:vimdiff !*
. Il peut également être généralisé au "n
ème argument" comme ceci:Enfin, avec les chemins, vous pouvez accéder à certaines parties du chemin en ajoutant
:h
et:t
à l'un des expandos ci-dessus:la source
Lors de l'exécution de commandes, je souhaite parfois exécuter une commande avec les arguments précédents. Pour ce faire, vous pouvez utiliser ce raccourci:
Parfois, au lieu d'utiliser find, j'éclate une boucle d'une ligne si j'ai besoin d'exécuter un tas de commandes sur une liste de fichiers.
La configuration des options d'historique de ligne de commande dans mon .bash_login (ou .bashrc) est vraiment utile. Ce qui suit est un ensemble de paramètres que j'utilise sur mon Macbook Pro.
La configuration de ce qui suit fait que bash efface les commandes en double dans votre historique:
J'ai également augmenté la taille de mon histoire assez haut. Pourquoi pas? Cela ne semble rien ralentir sur les microprocesseurs actuels.
Une autre chose que je fais est d'ignorer certaines commandes de mon historique. Pas besoin de se souvenir de la commande exit.
Vous voulez certainement définir histappend. Sinon, bash écrase votre historique lorsque vous quittez.
Une autre option que j'utilise est cmdhist. Cela vous permet d'enregistrer les commandes multilignes dans l'historique en une seule commande.
Enfin, sous Mac OS X (si vous n'utilisez pas le mode vi), vous voudrez réinitialiser <CTRL> -S pour ne pas être arrêté de défilement. Cela empêche bash de pouvoir l'interpréter comme une recherche vers l'avant.
la source
Comment ne lister que les sous-répertoires de l'actuel?
C'est une astuce simple, mais vous ne sauriez pas combien de temps il me fallait pour trouver celle-là!
la source
alias lsd='ls -F | grep --color /'
, qui énumérerait la même chose mais d'une manière plus boiteuse. Cependant, il listerait un répertoire par ligne, pour faciliter l'analyse. J'ai modifié votre commande pour faire la même chose:ls -d1 */
ESC.
Insère les derniers arguments de votre dernière commande bash. C'est plus pratique que vous ne le pensez.
CD ESC.
la source
Bien sûr, vous pouvez "
diff file1.txt file2.txt
", mais Bash prend en charge la substitution de processus , ce qui vous permet dediff
sortir des commandes.Par exemple, disons que je veux m'assurer que mon script me donne le résultat attendu. Je peux simplement envelopper mon script dans <() et le nourrir
diff
pour obtenir un test unitaire rapide et sale:Comme autre exemple, disons que je veux vérifier si deux serveurs ont la même liste de RPM installés. Plutôt que de sshing sur chaque serveur, d'écrire chaque liste de RPM dans des fichiers séparés et de faire un
diff
sur ces fichiers, je peux simplement faire lediff
depuis mon poste de travail:Il y a plus d'exemples dans le Advanced Bash-Scripting Guide à http://tldp.org/LDP/abs/html/process-sub.html .
la source
Ma commande préférée est "ls -thor"
Il invoque le pouvoir des dieux de répertorier les fichiers les plus récemment modifiés dans un format facilement lisible.
la source
ls -bart -simpson -ruls
. S, ICNRls -lort
le mot danois pour "merde". Omettre des groupes et ne pas recevoir la colère de valhal :)Plus une nouveauté, mais c'est malin ...
Top 10 des commandes utilisées:
Exemple de sortie:
la source
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R recherche inversée. Appuyez sur ^ R, saisissez un fragment d'une commande précédente que vous souhaitez associer et appuyez sur ^ R jusqu'à ce que vous trouviez celle que vous souhaitez. Ensuite, je n'ai pas à me souvenir des commandes récemment utilisées qui sont encore dans mon histoire. Pas exclusivement bash, mais aussi: ^ E pour la fin de la ligne, ^ A pour le début de la ligne, ^ U et ^ K pour supprimer respectivement avant et après le curseur.
la source
J'ai souvent des alias pour vi, ls, etc. mais parfois vous voulez échapper l'alias. Ajoutez simplement une barre oblique inverse à la commande devant:
Par exemple:
Cool, non?
la source
command
- voirSHELL BUILTIN COMMANDS
dans le manuel de Bash.Voici quelques modifications de configuration:
~/.inputrc
:Cela fonctionne de la même manière que
^R
mais en utilisant les touches fléchées à la place. Cela signifie que je peux taper (par exemple)cd /media/
puis appuyer sur la flèche vers le haut pour aller à la dernière chose que je voulaiscd
dans le/media/
dossier.(J'utilise Gnome Terminal, vous devrez peut-être changer les codes d'échappement pour d'autres émulateurs de terminal.)
La complétion Bash est également incroyablement utile, mais c'est un ajout beaucoup plus subtil. Dans
~/.bashrc
:Cela activera la complétion de tabulation par programme (par exemple, la tentative de complétion de tabulation lorsque la ligne de commande commence par
evince
n'affichera que les fichiers que evince peut ouvrir, et il affichera également les options de ligne de commande de tabulation complète).Fonctionne bien avec cela également dans
~/.inputrc
:la source
J'utilise beaucoup ce qui suit:
Le
:p
modificateur pour imprimer un résultat d'historique. Par exempleImprime la dernière commande afin que vous puissiez vérifier qu'elle est correcte avant de l'exécuter à nouveau. Entrez simplement
!!
pour l'exécuter.Dans le même ordre d'idées:
Rechercher dans votre historique la commande la plus récente contenant la chaîne «foo» et l'afficher.
Si vous n'avez pas besoin d'imprimer,
effectue la recherche et l'exécute immédiatement.
la source
bind Space:magic-space # !pin<space>
J'ai une arme secrète: le shell-fu.
Il existe des milliers de conseils intelligents, de trucs sympas et de recettes efficaces qui, la plupart du temps, tiennent sur une seule ligne.
Celui que j'adore (mais je triche un peu car j'utilise le fait que Python est installé sur la plupart des systèmes Unix maintenant):
Désormais, chaque fois que vous tapez "webshare", le répertoire courant sera disponible via le port 8000. Vraiment sympa lorsque vous voulez partager des fichiers avec des amis sur un réseau local sans clé usb ni répertoire distant. Le streaming vidéo et musique fonctionnera également.
Et bien sûr la bombe à fourche classique qui est complètement inutile mais toujours très amusante:
N'essayez pas cela sur un serveur de production ...
la source
python -m SimpleHTTPServer
(à moins que je ne manque quelque chose de fantaisie que la commande d'origine faitVous pouvez utiliser la commande watch en conjonction avec une autre commande pour rechercher des modifications. Un exemple de cela était lorsque je testais mon routeur, et je voulais obtenir des chiffres à jour sur des choses comme le rapport signal sur bruit, etc.
la source
afin de trouver tous les endroits où PROG est disponible, généralement quelque part dans ~ / bin plutôt que celui de / usr / bin / PROG auquel on aurait pu s'attendre.
la source
PATH
il affichera chacun d'eux.J'aime construire des commandes avec echo et les diriger vers le shell:
Pourquoi? Parce que cela me permet de voir ce qui va être fait avant de le faire. De cette façon, si j'ai une erreur horrible (comme supprimer mon répertoire personnel), je peux l'attraper avant qu'elle ne se produise. De toute évidence, c'est le plus important pour les actions destructives ou irrévocables.
la source
$ find dir -name \\*~ -exec rm {} +
Lors du téléchargement d'un gros fichier, je fais assez souvent:
Et puis ctrl + c quand j'ai terminé (ou si
ls
retourne une valeur non nulle). C'est similaire auwatch
programme mais il utilise le shell à la place, donc il fonctionne sur les plates-formes sanswatch
.Un autre outil utile est netcat, ou
nc
. Si tu fais:Ensuite, vous pouvez configurer une imprimante sur un autre ordinateur, mais utiliser à la place l'adresse IP de l'ordinateur exécutant netcat. Lorsque le travail d'impression est envoyé, il est reçu par l'ordinateur exécutant netcat et vidé dans
printjob.prn
.la source
wget
?watch ls -la <filename>
(utilisez -n5 si vous n'aimez pas la valeur par défaut de 2 secondes).watch
n'est cependant pas disponible sur toutes les plates-formes, comme Solaris, Mac OS X, etc. @Porges, je ne sais pas ce que vous voulez dire. Wget peut-il également écouter sur un port?pushd
et sontpopd
presque toujours utilesla source
Une façon préférée de naviguer lorsque j'utilise plusieurs répertoires dans des endroits très séparés dans une hiérarchie d'arborescence est d'utiliser acf_func.sh (répertorié ci-dessous). Une fois défini, vous pouvez faire
cd -
pour voir une liste des répertoires récents, avec un menu numérique
cd -2
pour accéder au deuxième répertoire le plus récent.
Très simple d'utilisation, très pratique.
Voici le code:
la source
Développez les lignes compliquées avant de frapper l'entrée redoutée
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
& c.
la source
Enter
:)J'ai toujours aimé:
J'utilise également
shopt -s cdable_vars
, alors vous pouvez créer des variables bash dans des répertoires communs. Donc, pour l'arborescence des sources de mon entreprise, je crée un tas de variables comme:alors je peux passer à ce répertoire par
cd Dcentmain
.la source
screen
par défaut. Je le remappe en ctrl-X dans my.screenrc
, mais je ne suis pas un utilisateur emacs.pbcopy
Cela copie dans le presse-papiers du système Mac. Vous pouvez y diriger des commandes ... essayez:
pwd | pbcopy
la source
alias pbcopy='xsel --clipboard --input'
etalias pbpaste='xsel --clipboard --output'
la source
history 10
place dehistory | tail -10
(ce qui devrait êtretail -n 10
d'ailleurs puisque cette syntaxe est obsolète).Utiliser 'set -o vi' depuis la ligne de commande, ou mieux, dans .bashrc, vous met en mode d'édition vi sur la ligne de commande. Vous commencez en mode «insertion» pour pouvoir taper et revenir en arrière comme d'habitude, mais si vous faites une «grosse» erreur, vous pouvez appuyer sur la touche échap et ensuite utiliser «b» et «f» pour vous déplacer comme vous le faites dans vi. cw pour changer un mot. Particulièrement utile après avoir mis en place une commande d'historique que vous souhaitez modifier.
la source
Semblable à beaucoup ci-dessus, mon préféré actuel est la touche [alt]. (Touches Alt et "." Ensemble) c'est la même chose que $! (Insère le dernier argument de la commande précédente) sauf qu'il est immédiat et pour moi plus facile à taper. (Ne peut tout simplement pas être utilisé dans les scripts)
par exemple:
la source
Chaîne plusieurs commandes ensemble à l'aide de la commande && :
ou
la source