Il existe une fonction d’expansion de paramètre / variable très pratique dans BASH que je ne vois pas dans l’historique. J'ai vérifié les pages de manuel pour l'historique et pour BASH lui-même. Pas là ... peut-être que j'ai raté ça.
Exemple: j'utilise beaucoup ssh et je peux le faire avec une expansion variable.
host=foo@bar.org
Supposons que je veuille extraire uniquement l'hôte. Supprimez plutôt le nom d'utilisateur.
hostonly=${host##*@}
Si je
echo $hostonly
Je reçois:
bar.org
Ma question: Est-il possible de faire cela avec l'historique en ligne de commande?
par exemple.,
Commande 1:
ssh foo@bar.org
Commande 2:
ssh gary@!!:##*@
Bien sûr, cela ne fonctionne pas, mais quelqu'un peut-il confirmer si ce type de correspondance de modèle est disponible?
Merci!
Bubnoff
Réponses:
La
r
commande (qui est elle-même un cas particulier de lafc
commande) est une astuce souvent manquée par les gens :Le cas plus général est
qui vous permet de sélectionner une commande de l’historique par sous-chaîne, puis d’effectuer la substitution spécifiée et de l’exécuter. Si vous laissez cette option
-s
, la commande sera chargée$EDITOR
pour une modification plus complexe; l'édition de ligne de commande rend la plupart du temps inutile, mais certaines modifications sont difficiles à effectuer sur la ligne de commande.Vous pouvez également effectuer des manipulations assez complexes à l'aide de la
!
syntaxe de référence d'historique, mais pour des raisons historiques (le mécanisme d'historique de base a été établi par le passécsh
et toutes les améliorations ont pour la plupart conservé la compatibilité), il utilise une syntaxe différente. Voir ici pour plus de détails.la source
r
est un alias qui a probablement besoin d'être défini (certaines installations peuvent l'inclure par défaut dans.bashrc
).fc
toujours seulement les substitutions de chaînes (il ne supporte pas les caractères génériques).bash
version;r
a été hérité deksh
, etbash
4 semble enlever tous lesksh
-ismes.La commande est répétée en utilisant "gary" comme nom d'utilisateur au lieu de "foo". Ce qui suit fonctionne de la même manière:
la source