이전에 실행한 명령의 출력에서 ​​문자열을 검색하는 방법

이전에 실행한 명령의 출력에서 ​​문자열을 검색하는 방법

예를 들어 여러 명령을 실행한 후 다음을 수행합니다.

$ 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나머지는 오류가 발생합니다).

관련 정보