Cómo ejecutar un programa ejecutable con filtro

Cómo ejecutar un programa ejecutable con filtro

Quiero ejecutar un script de shell. Este script tiene un nombre largo. Entonces quiero usar un filtro para el archivo.

ex:ls | grep myfile | ./

¿Es posible ejecutar un archivo con filtro?

Respuesta1

Sólo tipo:

*myfile*

También puedes hacer:

"$(ls | grep pattern)"

si coincide con expresiones regulares completas en lugar de solo comodines de nombre de archivo.

Todas estas soluciones suponen que hay un solo archivo en el directorio actual que coincide con el patrón.

Respuesta2

Puedes usarxargspara este tipo de cosas:

ls | grep myfile | xargs sh

xargslee líneas en su entrada y las proporciona como argumentos al programa que se le da como argumento: aquí, leerá la salida de grep y luego ejecutará sh long_myfile_name. (Cambie sha bashsi su secuencia de comandos depende de características específicas de Bash o de algún otro shell)

También puedes ejecutar sh *myfile*esencialmente el mismo efecto en este caso simple; si grepes más complicado, es posible que no puedas hacerlo, pero sh "$(ls | grep ...)"funcionará.


Dicho esto, hay algunas razones por las que quizás no quieras hacer esto: en particular, si es posible que en algún momento haya dos archivos que coincidan con tu archivo grep. En ese momento sucederá una de tres cosas: su secuencia de comandos obtiene un argumento adicional, se ejecutan dos secuencias de comandos diferentes o se ejecuta otra secuencia de comandos en su lugar. Podrías, por ejemplo, conectar head -n 1para evitar los dos primeros, pero luego se ejecutará uno arbitrario, lo cual no es de mucha ayuda. En ese $()caso, simplemente fracasará, lo que probablemente sea el mejor de un mal conjunto de resultados. Si hay espacios en los nombres de los archivos tendrás que tener aún más cuidado.

Completar la pestaña de su shell puede ser una mejor opción: probablemente pueda escribir *myfile*y presionar TAB para obtener una expansión correcta o una indicación de que hay más de una posibilidad, o incluso simplemente comenzar a escribir el nombre y la pestaña completa hasta el final. Si está ejecutando esto en un script, simplemente escriba el nombre completo allí; solo tiene que escribirlo una vez. La respuesta sobre la línea funcionará, pero realmente no la recomiendo.

Respuesta3

puedes usar xargspor ejemplo

ls | grep myfile | xargs bash

o filtrar usandofind

find ./ -maxdepth 1 -name "myfile" -exec ./'{}' \;

información relacionada