"kill | pgrep dnsspoof"와 "kill `pgrep dnsspoof`"의 차이점

"kill | pgrep dnsspoof"와 "kill `pgrep dnsspoof`"의 차이점

나는 이것이 |프로그램의 출력을 다른 프로그램의 입력으로 제공하는 데 사용된다고 생각합니다. 그래서 시도했지만 kill | pgrep dnsspoof성공하지 못했습니다. 그래서 나는 노력했다

kill `pgrep dnsspoof`

효과가 있었습니다. 누구든지 이러한 명령이 내부적으로 어떻게 작동하는지 말해 줄 수 있습니까?

답변1

|한 프로그램의 출력을 다른 프로그램에 공급하는 것이 정확합니다. 데이터 left흐름이 right.

pgrep dnsspoof | kill

pgrepdnsspoof의 프로세스 번호가 발견되어 제공된 kill다음 종료되므로 이 작업은 작동합니다 . Kill은 명령줄에서 죽일 항목만 살펴보기 때문에 이것이 작동하지 않는 것으로 나타났습니다.

pgrep그래서 우리는 명령줄에 출력을 넣어야 합니다 . 이것이 `pgrep dnsspoof` 현대에서 $(pgrep dnsspoof)하는 일입니다. 백틱이나 대괄호 안에서 명령을 실행하고 명령 위치에 출력을 놓는 것입니다. 따라서 pgrep dnsspoof출력이 이면 5432run 명령은 이며 kill 5432, 이는 Kill 프로그램을 호출하는 올바른 방법입니다.

을 사용하면 여러 가지 장점이 있습니다 $( ). 중첩하기가 더 쉽고 이스케이프해야 할 항목이 적습니다. 따라서 쉘이 이를 지원하는 경우 우선적으로 사용해야 합니다 ` `.

답변2

당신 말이 맞지만 |반대 방식으로 명령을 실행하고 있습니다. 실행 pgrep dnsspoof한 다음 출력을 input 으로 보내야 kill하지만 표준 입력에 대한 명령을 허용하지 않으므로 명령의 매개 변수에 철자를 지정해야 합니다. xargsSTDIN 스트림 데이터를 읽고 각 줄을 공백으로 구분된 인수로 변환하여 명령에 사용해야 합니다 .

pgrep dnsspoof | xargs kill

kill그러나 명령의 출력을 입력으로 보내는 방식 pgrep dnsspoof은 의미가 없습니다.

관련 정보