나는 파일 이름을 entr
.
( entr
파일을 감시하고 시작 시 및 해당 파일이 변경될 때 명령을 실행하는 프로그램입니다. ls *.ext
예를 들어 해당 문서에 파이프로 연결되어 있다고 되어 있으므로 줄 바꿈으로 구분된 유효한 파일 이름 목록이 파이프로 연결될 것으로 예상합니다. 파일 이름이 잘못되었습니다.)
여러 줄
이 명령을 사용하면 여러 줄 문자열로 특정 파일을 나열할 수 있습니다.
$ 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"