저는 유닉스를 처음 접했고 현재 일어나고 있는 일을 많이 접했습니다.
명령(예 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 '?'