Enumere archivos específicos en el comando que espera que `ls` se canalice hacia él

Enumere archivos específicos en el comando que espera que `ls` se canalice hacia él

Estoy buscando una forma elegante y compatible de dirigir los nombres de los archivos a entr. Sé que lo siguiente funciona con Bash, pero me gustaría un comando que funcione en otros shells.

( entres un programa que observa archivos y ejecuta un comando al inicio y cuando esos archivos cambian. Su documentación muestra ls *.ext, por ejemplo, canalizado a él, por lo que espera una lista separada por una nueva línea de nombres de archivos legítimos canalizados. Advierte sobre nombres de archivos incorrectos .)

multilíneas

Este comando me permite enumerar archivos específicos con una cadena de varias líneas:

$ entr echo "command ran" <<< "
> filename1
> filename2
> "

Las comillas y tener que enumerarlas en líneas separadas me resultan molestas. Además, una búsqueda rápida indica que es posible que no funcione en shells distintos de Bash.

Podría usar interactivo cat:

$ cat | entr echo "command ran"
filename2
filename2

pero nuevamente tengo que hacer una nueva línea cada vez, sin mucho margen de error, e ingresar con cuidado Ctrl-Dal final.

Un heredoc funciona de manera similar pero implica una sintaxis de sujetalibros.

$ cat << EOF | entr echo "command ran"
> filename1
> filename2
> EOF

frases ingeniosas:

También podría hacer ls, que parece bonito a primera vista:

$ ls filename1 filename2 | entr echo "command ran" 

Pero lseliminaría los nombres mal escritos, mientras entrvalida y advierte sobre nombres incorrectos, y me preocupan los efectos secundarios de llamar a ls de esta manera.

Podría echoy canalizar trantes de canalizar a entr:

$ echo filename1 filename2 | tr " " "\n" | entr echo "command ran"

Pero no me gusta tener todos los comandos adicionales.

La pregunta:

¿Cómo escribo un comando breve y elegante que funcione en la mayoría (preferiblemente en todos) los shells? La sintaxis esperada por posix sería ideal.

Respuesta1

Como entrparece querer cada archivo en una línea separada, estás bastante limitado. Tútenerpara tener cada nombre de archivo en una línea separada. Cualquier intento de convertirlo en una sola línea (por ejemplo, su trejemplo) fallará si el carácter separador es parte de un nombre de archivo ("este es un nombre de archivo").

solo haría lo simple

echo 'filename 1
filename2' | entr echo "command ran"

información relacionada