Список определенных файлов в команде, которая ожидает передачи `ls`

Список определенных файлов в команде, которая ожидает передачи `ls`

Я ищу элегантный кросс-совместимый способ направлять имена файлов в entr. Я знаю, что следующее работает с Bash, но мне нужна команда, которая работала бы и в других оболочках.

( entr— это программа, которая отслеживает файлы и запускает команду при запуске и при изменении этих файлов. В ее документации указано ls *.ext, например, что она подключена к ней по конвейеру — поэтому она ожидает переданного ей списка разрешенных имен файлов, разделенных новой строкой. Она предупреждает о неверных именах файлов.)

многолинейки

Эта команда позволяет мне вывести список определенных файлов с помощью многострочной строки:

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

Я нахожу кавычки и необходимость перечислять их на отдельных строках раздражающими. Кроме того, быстрый поиск показывает, что это может не работать в оболочках, отличных от Bash.

Я мог бы использовать интерактив cat:

$ cat | entr echo "command ran"
filename2
filename2

но мне снова приходится каждый раз переходить на новую строку, не оставляя большого права на ошибку, и внимательно вводить данные Ctrl-Dв конце.

Heredoc работает аналогично, но использует синтаксис bookend.

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

однострочники:

Я также мог бы сделать ls, что на первый взгляд выглядит неплохо:

$ ls filename1 filename2 | entr echo "command ran" 

Но lsон удалит неправильно написанные имена, при этом entrпроверит и предупредит о неправильных именах, и меня беспокоят побочные эффекты вызова ls таким образом.

Я мог бы echoи переключиться на трубу, trпрежде чем переключиться на трубу entr:

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

Но мне не нравится иметь все эти дополнительные команды.

Вопрос:

Как написать короткую, элегантную команду, которая работает в большинстве (предпочтительно во всех) оболочках? Синтаксис, ожидаемый posix, был бы идеальным.

решение1

Сentr , кажется, вы хотите, чтобы каждый файл был на отдельной строке, вы довольно ограничены. Выиметьчтобы каждое имя файла было на отдельной строке. Любая попытка сделать его одной строкой (например, ваш trпример) потерпит неудачу, если символ-разделитель является частью имени файла («это имя файла»).

Я бы просто сделал простое

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

Связанный контент