장기 실행 grep을 실행하고 결과를 less로 파이프하고 모든 것을 백그라운드에 배치하려면 어떻게 해야 합니까?

장기 실행 grep을 실행하고 결과를 less로 파이프하고 모든 것을 백그라운드에 배치하려면 어떻게 해야 합니까?

나는 종종 다음과 같이 특정 기호에 대한 코드베이스를 찾아야 하는 경우를 발견합니다.

find src/galio -not -path './src/stapi-sdk/apilib/* -regextype posix-extended -iregex '.*(\.hpp|\.hxx|\.cpp|\.cxx|\.h|\.c|\.ma?k|\.sh|makefile)' | xargs egrep --colour=always -Hn 'NUM_EXTERITY_FLAGS' | less -R

find/결합에는 grep꽤 오랜 시간이 걸릴 수 있으며 전체 체인을 백그라운드에 두고( Ctrl- Z및 사용 bg) 나중에 다시 돌아와서 결과를 확인하고 싶습니다.

그러나 전체 작업을 백그라운드로 전환한 후 전체 작업이 즉시 다시 "중지"됩니다 bg. 해결책이 있나요?

감사해요

답변1

screen이런 상황에서는 추천하고 싶습니다. (또는 가능하다면 다른 창에서 명령을 실행할 수도 있습니다.)

분리된 세션을 시작하려면 를 입력하면 됩니다 screen. 그런 다음 명령을 입력하되 &배경으로 설정하지 마십시오. 실행 중인 세션을 분리하려면 Ctrlathen을 사용하세요 . 기존 세션을 나열하고 다시 연결하는 d데 사용됩니다 .screen -lsscreen -r

답변2

검색 속도를 줄이는 두 가지 문제는 파이프 대기와 읽기를 위해 stdout/error를 여는 것입니다. 일반적인 작업에서는 전체 화면을 채울 만큼 적은 양의 내용을 읽은 후 다음 페이지에 도달할 때까지 읽기를 중지합니다. 파이프에서 읽는 중이고 파이프에 쓰는 프로그램이 파이프 ID가 가득 차서 파이프를 읽고 쓰기가 다음 페이지를 채울 만큼 느려질 때까지 대기 상태에 있다는 것을 알아차리지 않는 한 잘 작동합니다. 이 동작을 줄이는 가장 쉬운 두 가지 방법은 존재하지 않는 것을 검색하거나 표준 입력의 크기를 계산하는 것입니다. 둘 다 전체 파일을 읽습니다. 다음 문제는 덜 제어하려면 키보드로부터 명령을 받아야 하기 때문에 읽기 위해 표준 출력이나 표준 오류를 열어준다는 점이다. 이것은 이상하지만 잘 작동하지만(덜 책임지는 일부 보호 장치를 사용하여) 이제 less에는 읽기용 열린 파일 핸들이 있으며, 이는 제어 tty(덜 제어할 때 필요함)를 가리키고 물건을 옮길 때 Put less가 키를 읽으려고 시도하면 쉘은 키를 잠자기 상태로 만듭니다. 파일을 백그라운드에 넣기 전에 less에서 파일의 끝 부분을 검색하여 이 문제를 해결할 수 있습니다.

관련 정보