grep은 원래 컨텍스트에 없는 결과를 제공합니다.

grep은 원래 컨텍스트에 없는 결과를 제공합니다.

저는 유닉스를 처음 접했고 현재 일어나고 있는 일을 많이 접했습니다.

명령(예 ps -eo 'tty,pid,comm': )을 입력하면 텍스트가 반환됩니다. 내가 이해하는 바에 따르면, 결과를 파이프로 연결하면 grep출력이 검색되고 해당 출력에서 ​​결과가 반환되어야 합니다.

그렇다면 명령과 완전히 다른 결과가 나타나는 이유는 무엇입니까 ps? 원래 명령의 형태도 아니고 ps설정 파일처럼 보이는 모호한 정보가 포함된 매우 긴 텍스트를 받았습니다.

답변1

귀하의 의견에 따르면 표시되는 출력은 다음과 같습니다.이름해당 종류의 첫 번째 파일입니다. 그 이유는 ?grep 명령의 문자가 실행 전에 셸에 의해 확장되기 때문입니다.

따라서 ps 명령은 예상대로 수행되지만 grep은 명령줄에서 파일을 greping하는 대신 해당 입력을 완전히 무시합니다.

다음을 수행하여 이를 직접 증명하십시오.

mkdir ~/tempdir
cd ~/tempdir
ps -eo 'tty,pid,comm' | grep ?

그러면 (파일이 없는) 빈 디렉토리가 생성되어 ?확장에 실패하고 grep으로 직접 전달됩니다. 그런 다음 다음과 같이 두 개의 파일을 만듭니다.

touch a
echo thisisfilebwithana > b

그런 다음 다음과 같이 grep을 다시 실행하십시오.

grep ?

너는 보게 될 것이다

thisisfilebwithana

grep내가 이것을 봤기 때문에 :

grep a b

이는 "'a'를 포함하는 파일 b의 모든 행 표시"로 해석됩니다.

대신에 당신이 하고 싶은 일은 물음표를 피하는 것입니다:

ps -eo 'tty,pid,comm' | grep \?

또는

ps -eo 'tty,pid,comm' | grep '?'

관련 정보