Requete
J'utilise Bash. Lorsque je recherche des fichiers, je fais souvent ce qui suit:
find -name stackexchange.hs
Et souvent, les résultats ressemblent à:
/youre/the/man/now/dog/stackexchange.hs
/you/are/no/longer/the/dog/dog/stackexchange.hs
/this/is/the/file/i/want/stackexchange.hs
Ensuite, je veux effectuer l'une des opérations suivantes:
- Option 1: Ouvrez le dernier élément de la liste des résultats dans vim .
- Option 2: Ouvrez le Nième élément dans la liste des résultats dans vim .
Actuellement, je coupe et colle avec la souris. Ce qui m'amène à ma question :
- Existe-t-il une ligne simple pour réaliser les options 1 et 2? Notez que cela se produit après la
find
commande. - Existe-t-il un moyen de capturer des lignes N à partir de stdout dans une sorte de vecteur / tableau bash?
Utilisation idéale
$ find -name am_i_really_all_alone.txt
./borges/library/you_are_not_alone.txt
./borges/library/am_i_really_all_alone.txt
$ vim (N)
(la syntaxe et la sémantique peuvent différer, mais vous obtenez le point)
Similaria
Il semble y avoir plusieurs questions similaires. Voici mes différences perçues (je suis ouvert à l'illumination):
- "Ouvrir un fichier trouvé avec la commande find" se concentre sur la création d'une ligne pour diriger un nom de fichier
find
versvim
(ou autre). Dans mon cas, je veux d'find
abord, pipe plus tard (pour ainsi dire). Ma capture / utilisation se produit strictement après . - "Réutiliser la dernière sortie de la commande Lind" semble bang-on, mais semble simplement répéter la commande et ne parle pas de capturer la Nième ligne de sortie. Franchement, ça me fait peur.
- "Capturer la sortie multiligne d'un Bash Builtin" est proche, mais pas tout à fait là.
- "Quelle est la différence exacte entre terminal, shell, tty, console, etc." celui-ci est vraiment juste une bonne lecture.
Merci de votre aide! Ayant utilisé * nix / BSD quand j'étais adolescent dans les années 90 et me faisant peur en appelant mon burnout, un voisin acid-head pour m'aider à installer les pilotes de ma carte son plug-and-play, je suis soulagé de discuter de la commande- minutie des lignes avec (perceptiblement) des individus moins effrayants. C'est bon d'être de retour.
la source
vim $(command |tail -n1)
.Réponses:
Voici une solution potentielle à votre problème qui devrait être raisonnablement (mais pas parfaitement) sûre en présence de noms de fichiers géniaux (ne gère pas les noms de fichiers avec des sauts de ligne - probablement réparable, mais il pourrait y avoir d'autres problèmes cachés).
Deux fonctions, la première s'exécute
find
avec les paramètres que vous lui transmettez, enregistre la sortie dans un tableau et les affiche. Le second est juste une aide pour accéder à ce tableau.Cas d'utilisation:
Les citations ne sont pas nécessaires autour du
$(myget index)
si vous n'avez pas d'espaces blancs ou d'autres caractères gênants dans vos noms de fichiers.Envoie toute la sortie de
find
dans votre environnement, ce qui peut être limité. (L'utilisation d'un fichier temporaire plutôt que de ce tableau résoudrait cela, mais a d'autres problèmes - notamment l'utilisation simultanée de plusieurs shells.)la source
J'ai ceci dans mon
.screenrc
:Fondamentalement, à l'écran, ¬1colle la ligne au-dessus du curseur ¬2, colle la deuxième ligne au-dessus du curseur ... et ainsi de suite. Vous voudrez peut-être ajouter plus pour les lignes 10 et supérieures, mais je trouve qu'après environ 7 déjà, je préfère utiliser la souris ou
screen
le mode de copie plutôt que de compter le nombre de lignes pour obtenir celle que je veux.la source
une autre solution est: vous pouvez écrire un script interactif qui vous demandera automatiquement votre choix. voici le code du script interactif:
enregistrez ce script avec n'importe quel nom, dites "autofind" et invoquez le script avec votre "commande find" comme argument voici le code pour appeler le script:
Mais avant d'utiliser le script, vérifiez votre "commande find" si elle donne un résultat ou non. Si elle affiche un résultat, utilisez uniquement le script
la source
La réponse de Mats était exactement ce que je cherchais. J'ai un peu développé son code pour permettre plus d'options get.
.
la source