예를 들어 여러 명령을 실행한 후 다음을 수행합니다.
$ cd /opt/something
$ find . -name *aa | grep 11
$ clear
$ <more commands go here>
일부 출력은 필요하지만 저장되지 않습니다. 이를 생성한 명령과 인수가 완전히 호출되지 않을 수 있습니다.
검색을 수행할 수 있는 방법이 있습니까 stdout
( clear
여러 번 호출되었더라도).
답변1
표준 출력은 일시적이거나 수명이 짧습니다. 저장하기 위한 몇 가지 단계를 수행하지 않으면 내보내는 즉시 사라지고 액세스할 수 없게 됩니다.
명령의 출력을 여러 번 재사용하려면 스칼라 변수(예:명령 대체), 배열 변수(예: readarray
/ 사용 mapfile
) 또는 파일(예: 리디렉션 또는 사용 tee
).
파일 이름을 사용할 때는 아래와 같이 항상 NUL을 구분 기호로 사용해야 합니다.모두다른 문자는 경로 이름의 유효한 문자입니다(현재 가장 일반적인 도구는 NUL로 구분된 입력 및 출력을 처리하기 위한 -0
, -z
, 또는 유사한 옵션입니다). -Z
이는 명령 대체를 사용하는 것이 안전하지 않음을 의미합니다 find
(파일 이름이 아닌 텍스트를 생성하는 다른 프로그램에서는 괜찮지만).
예를 들어
find . name '*aa' -print0 > files.list0
grep -z 11 files.list0
또는
readarray -d '' -t files < <(find . -name '*aa' -print0)
printf '%s\0' "${files[@]}" | grep -z 11
BTW는 *aa
명령에서 인용되어야 합니다 find
. 그렇지 않으면 쉘은 이를 일치하는 모든 파일로 확장합니다(첫 번째 파일만 조건자에 속하고 -name
나머지는 오류가 발생합니다).