Consulta
Yo uso Bash. Cuando busco archivos, a menudo hago lo siguiente:
find -name stackexchange.hs
Y a menudo los resultados se verán así:
/youre/the/man/now/dog/stackexchange.hs
/you/are/no/longer/the/dog/dog/stackexchange.hs
/this/is/the/file/i/want/stackexchange.hs
Entonces querré hacer uno de los siguientes:
- Opción 1: abra el último elemento de la lista de resultados en vim .
- Opción 2: abra el enésimo elemento en la lista de resultados en vim .
Actualmente, corto y pego con el mouse. Lo que me lleva a mi pregunta :
- ¿Hay una línea fácil y simple para lograr las opciones 1 y 2? Tenga en cuenta que esto ocurre después del
find
comando. - ¿Hay alguna manera de capturar líneas N de stdout en algún tipo de vector / matriz bash?
Uso ideal
$ 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 sintaxis y la semántica pueden diferir, pero entiendes el punto)
Similaria
Parece que hay varias preguntas similares. Aquí están mis diferencias percibidas (estoy abierto a la iluminación):
- "Abrir archivo encontrado con el hallazgo de comandos" se centra en la creación de una sola línea a la tubería de un nombre de archivo desde
find
dentrovim
(o lo que sea). En mi caso, quierofind
primero, canalizar después (por así decirlo). Mi captura / uso ocurre estrictamente después . - "Reutilizar la última salida del comando Lind" parece estar en marcha, pero parece simplemente repetir el comando y no habla de capturar la enésima línea de salida. Francamente, me da miedo.
- "Capturar la salida de varias líneas de un Bash Builtin" está cerca, pero no del todo.
- "¿Cuál es la diferencia exacta entre terminal, shell, tty, consola, etc." Esta es realmente una buena lectura.
¡Gracias por tu ayuda! Después de haber usado * nix / BSD cuando era un adolescente en los años 90 y me asusté llamando a mi vecino agotado y ácido para ayudarme a instalar controladores para mi tarjeta de sonido plug-and-play, me siento aliviado de hablar sobre el comando alinear minucias con individuos (perceptiblemente) menos aterradores. Se siente bien estar de vuelta.
fuente
vim $(command |tail -n1)
.Respuestas:
Aquí hay una posible solución a su problema que debería ser razonablemente segura (pero no perfectamente) en presencia de nombres de archivos originales (no maneja nombres de archivos con saltos de línea), probablemente reparable, pero puede haber otros problemas al acecho).
Dos funciones, la primera se ejecuta
find
con los parámetros que le pasa, guarda la salida en una matriz y las muestra. El segundo es solo un ayudante para acceder a esa matriz.Caso de uso:
No se requieren comillas
$(myget index)
si no tiene espacios en blanco u otros caracteres problemáticos en sus nombres de archivo.Empuja toda la salida
find
a su entorno, que puede ser limitado. (El uso de un archivo temporal en lugar de esa matriz resolvería eso, pero tiene otros problemas, especialmente el uso concurrente de múltiples shells).fuente
Tengo esto en mi
.screenrc
:Básicamente, en la pantalla, ¬1pega la línea sobre el cursor ¬2, pega la segunda línea sobre el cursor ... y así sucesivamente. Es posible que desee agregar más para las líneas 10 y superiores, pero creo que después de aproximadamente las 7, prefiero usar el mouse o
screen
el modo de copia que contar el número de líneas para obtener la que quiero.fuente
Otra solución es: puede escribir una secuencia de comandos interactiva que le pedirá automáticamente su elección. Aquí está el código para el script interactivo:
guarde este script con cualquier nombre, diga "autofind" e invoque el script con su "comando find" como argumento aquí está el código para invocar el script:
Pero antes de usar el script, verifique su "comando find" si está dando resultado o no. Si está mostrando algún resultado, entonces solo use el script
fuente
La respuesta de Mats fue justo lo que estaba buscando. He ampliado un poco su código para permitir más opciones de obtención.
.
fuente