좋아요, 이게 날 좀 미치게 만드네요.
하위 디렉터리 집합의 파일 수를 보려고 합니다.
find . | wc -l
하위 폴더 및 파일 수를 올바르게 반환합니다.
그러나 시계 화면으로 watch 'find . | wc -l'
돌아갑니다 . 큰따옴표나 역따옴표(`)와 동일한 값을 반환합니다.
watch: find . | wc -l: No such file or directory
이것은고대의배쉬 버전:
GNU bash, version 3.00.16(2)-release (i486-slackware-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
이것은 또한 임베디드 장치이므로 BusyBox v1.1.0 (2010.06.14-02:47+0000) multi-call binary
일반 GNU 유틸리티 대신 busybox()를 실행하므로 가장 일반적으로 사용되는 도구의 대부분의 스위치와 기능도 존재하지 않습니다.
따라서 이를 고려해야 합니다. 그러나 Linux 설치는 모듈 디스크에 구워져 있으므로 쉽게 업데이트할 수 있는 방법이 없습니다.
동일한 명령( watch 'find . | wc -l'
)은 최신 Linux 설치에서도 잘 작동하므로 이 질문은 오래된 bash를 처리하는 것에 관한 것이므로 이 정확한 코드 조각에 어떤 문제가 있습니까?다른 곳이 맞는 것 같네요!).
답변1
구현/버전에 따라 watch
명령줄을 해석하기 위해 셸을 시작하지 않고 대신 인수로 받는 인수를 사용하는 명령을 실행할 수 있습니다. 따라서 이 경우 셸 명령줄을 실행하는 데 필요한 경우 다음과 같이 명시적으로 셸을 시작해야 합니다.
watch sh -c 'find . | wc -l'
inotifywait -rm .
디렉터리의 활동을 모니터링하기 위한 명령 도 참조하세요 (Linux의 경우).
또한 파일 이름에 개행 문자가 포함되어 있지 않으면 find . | wc -l
파일 수(항목 제외)만 반환됩니다. ..
이것이 문제가 될 수 있는 경우 다음을 수행할 수 있습니다.
find .//. | grep -c //
또한 이름이 지정된 GNU 또는 Unix 유틸리티가 없다는 점에 유의하세요 watch
. Linux 도구 모음에는 명령이 있고 watch
busybox 에는 procps
구현이 있습니다 . watch
BSD에서는 watch
완전히 다른 것을 해보세요. watch
표준 명령이 아닙니다(POSIX, Unix 또는 LSB 사양의 일부가 아님).