나는 때때로 다음과 같은 프로세스를 사용합니다.
- 느린 시작
- 잠시 달리다
- 대량의 정보를 표준 출력에 기록
예를 들어 이것이 대규모 웹 애플리케이션이라고 가정합니다.
이제 당분간은 포함 내용을 보고 싶다고 가정하겠습니다 foo
. 결국 다음과 같은 작업을 수행하게 됩니다.
$ heavy_process
# watch for a bit
# ah, now I just want to see lines that contain 'foo'
# (kill heavy_process)
$ heavy_process | grep foo
# watch for a bit
# ok, I'm statisfied about foo. Let's look at bar instead
# (kill heavy_process)
$ heavy_process | grep bar
heavy_process
정말 바꾸고 싶을 때 | grep
.
명령줄에서 파이프라인 내에서 "파이프를 추가 및 제거"하는 방법이 있습니까?
답변1
내 생각엔 좀제어 프로세스피하기 어려운. 나는 다양한 방법을 생각할 수 있다. grep
대신 코어를 따라 동적 패턴 일치자가 동적으로 로드 awk '$0 ~ pat'
됩니다 pat
(예: GNU awk
coprocess를 통해). 또는 기본 패턴 주입 솔루션모드 변경awk
아래와 같이 필터가 패턴을 동적으로 쉽게 조정할 수 있도록 지시문이 데이터 스트림에 삽입됩니다 .
mkfifo cmdfifo # create once an asynchroneous communication channel
{ while read cmd < cmdfifo ; do printf "%s\n" "@$cmd" ; done &
heavy_process ;} |
awk '
/^@/ { pat = substr($0,2) ; next } # parse the injected pattern
pat !="" && $0 ~ pat # if pattern is set print matching lines
'
검색 특정 모드를 활성화하거나 전환하려면 다음을 사용할 수 있습니다.
echo bar > cmdfifo
"bar" 매칭을 활성화한 후
echo foo > cmdfifo
모드를 "foo"로 동적으로 변경합니다.
답변2
나는 귀하의 제안이 백그라운드에서 명령을 실행할 때 수정된 최상의 솔루션이라고 생각합니다.
heavy_process > some_file &
stderr에서 검색할 수 있도록 하려는 텍스트를 작성하려면 2>&1
if를 추가하세요 . heavy_process
프로그램이 "많은 정보를 표준 출력에 기록한다"고 말했으므로 프로세스가 비동기적으로 실행되도록 2>&1
명령 끝에 . &
달리기. 사용하는 셸에 따라 종료 시 알림을 받을 수도 있습니다.
검색 프로세스의 출력지금까지, 당신에게 필요한 것은
grep foo some_file
지금까지의 검색 결과 프로세스가 파일에 쓰는 동안 계속해서 파일을 모니터링합니다., 사용
tail -n +1 -f some_file | grep foo
그렇지 않은 경우 -n +1
파일 tail
의 마지막 10줄만 제공됩니다.
답변3
다음과 같은 스크립트를 작성할 수 있습니다.
#! /bin/bash
while true;
do
echo -n "Enter your regexp: "
read myregexp
heavy_process | grep "$myregexp"
done
Ctrl-c를 사용하여 언제든지 프로세스를 중단할 수 있습니다.