나는 이것이 |
프로그램의 출력을 다른 프로그램의 입력으로 제공하는 데 사용된다고 생각합니다. 그래서 시도했지만 kill | pgrep dnsspoof
성공하지 못했습니다. 그래서 나는 노력했다
kill `pgrep dnsspoof`
효과가 있었습니다. 누구든지 이러한 명령이 내부적으로 어떻게 작동하는지 말해 줄 수 있습니까?
답변1
|
한 프로그램의 출력을 다른 프로그램에 공급하는 것이 정확합니다. 데이터 left
흐름이 right
.
pgrep dnsspoof | kill
pgrep
dnsspoof의 프로세스 번호가 발견되어 제공된 kill
다음 종료되므로 이 작업은 작동합니다 . Kill은 명령줄에서 죽일 항목만 살펴보기 때문에 이것이 작동하지 않는 것으로 나타났습니다.
pgrep
그래서 우리는 명령줄에 출력을 넣어야 합니다 . 이것이
`pgrep dnsspoof`
현대에서 $(pgrep dnsspoof)
하는 일입니다. 백틱이나 대괄호 안에서 명령을 실행하고 명령 위치에 출력을 놓는 것입니다. 따라서 pgrep dnsspoof
출력이 이면 5432
run 명령은 이며 kill 5432
, 이는 Kill 프로그램을 호출하는 올바른 방법입니다.
을 사용하면 여러 가지 장점이 있습니다 $( )
. 중첩하기가 더 쉽고 이스케이프해야 할 항목이 적습니다. 따라서 쉘이 이를 지원하는 경우 우선적으로 사용해야 합니다 ` `
.
답변2
당신 말이 맞지만 |
반대 방식으로 명령을 실행하고 있습니다. 실행 pgrep dnsspoof
한 다음 출력을 input 으로 보내야 kill
하지만 표준 입력에 대한 명령을 허용하지 않으므로 명령의 매개 변수에 철자를 지정해야 합니다. xargs
STDIN 스트림 데이터를 읽고 각 줄을 공백으로 구분된 인수로 변환하여 명령에 사용해야 합니다 .
pgrep dnsspoof | xargs kill
kill
그러나 명령의 출력을 입력으로 보내는 방식 pgrep dnsspoof
은 의미가 없습니다.