`ls`가 파이프될 것으로 예상되는 명령의 특정 파일 나열

`ls`가 파이프될 것으로 예상되는 명령의 특정 파일 나열

저는 파일 이름을 entr. 다음은 Bash에서 작동한다는 것을 알고 있지만 다른 셸에서도 작동하는 명령을 원합니다.

( entr파일을 감시하고 시작 시 및 해당 파일이 변경될 때 명령을 실행하는 프로그램입니다. 해당 문서에는 ls *.ext예를 들어 파이프된 것으로 표시됩니다. 따라서 파이프된 적법한 파일 이름의 개행으로 구분된 목록이 예상됩니다. 잘못된 파일 이름에 대해 경고합니다. .)

다중선

이 명령을 사용하면 여러 줄의 herestring으로 특정 파일을 나열할 수 있습니다.

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

나는 따옴표를 발견하고 이를 별도의 줄에 나열해야 하는 것이 짜증스럽습니다. 또한 빠른 검색을 통해 Bash 이외의 쉘에서는 작동하지 않을 수 있음을 나타냅니다.

대화식을 사용할 수 있습니다 cat.

$ cat | entr echo "command ran"
filename2
filename2

하지만 다시 한 번 매번 줄바꿈을 해야 하고 오류에 대한 여유가 많지 않으며 Ctrl-D끝에 조심스럽게 입력해야 합니다.

heredoc도 비슷하게 작동하지만 북엔드 구문이 포함됩니다.

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

한 줄짜리:

나는 또한 할 수 있는데 ls, 언뜻 보기에 좋아 보인다:

$ ls filename1 filename2 | entr echo "command ran" 

그러나 ls철자가 틀린 이름은 제거하고 entr부적절한 이름은 확인하고 경고하므로 이런 방식으로 ls를 호출하면 부작용이 걱정됩니다.

다음으로 파이핑하기 전에 echo파이핑 할 수 있습니다 .trentr

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

하지만 나는 모든 추가 명령을 갖고 싶지 않습니다.

질문:

대부분의(가급적이면 모든) 쉘에서 작동하는 짧고 우아한 명령을 어떻게 작성합니까? posix에서 예상하는 구문이 이상적입니다.

답변1

각 파일을 별도의 줄에 표시하려는 것처럼 보이 므로 entr꽤 제한적입니다. 너가지다각 파일 이름을 별도의 줄에 표시합니다. tr구분 기호 문자가 파일 이름("파일 이름입니다")의 일부인 경우 단일 라인(예: 예)으로 만들려는 시도 는 실패합니다.

난 그냥 간단하게 할래

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

관련 정보