
저는 파일 이름을 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
파이핑 할 수 있습니다 .tr
entr
$ echo filename1 filename2 | tr " " "\n" | entr echo "command ran"
하지만 나는 모든 추가 명령을 갖고 싶지 않습니다.
질문:
대부분의(가급적이면 모든) 쉘에서 작동하는 짧고 우아한 명령을 어떻게 작성합니까? posix에서 예상하는 구문이 이상적입니다.
답변1
각 파일을 별도의 줄에 표시하려는 것처럼 보이 므로 entr
꽤 제한적입니다. 너가지다각 파일 이름을 별도의 줄에 표시합니다. tr
구분 기호 문자가 파일 이름("파일 이름입니다")의 일부인 경우 단일 라인(예: 예)으로 만들려는 시도 는 실패합니다.
난 그냥 간단하게 할래
echo 'filename 1
filename2' | entr echo "command ran"