guake
터미널을 종료하기 위해 별칭 명령을 추가했습니다..bashrc
alias killguake="kill -9 $(ps aux | grep guake | head -n -1 | awk '{print $2}')"
그러나 문제는 하위 명령 ie가 ps aux | grep guake | head -n -1 | awk '{print $2}'
터미널이 시작될 때 실행되고 killguake
로 설정된다는 것입니다 kill -9 result_of_subcommand
.
하위 명령이 실행될 때마다 실행/평가되도록 이를 설정할 수 있는 방법이 있습니까 killguake
? 이런 방식으로 guake의 최신 PID를 얻을 수 있습니다.
kill
나는 또한pipes를 사용해 보았지만 xargs
, 그것은 또한 시작시 모든 것이 계산된다는 동일한 결과로 이어졌습니다. 이것이 파이프를 사용하는 방법입니다.
ps aux | grep guake | head -n -1 | awk '{print $2}' | xargs -I{} kill -9 {}
답변1
대신 사용하십시오 pkill
:
alias killguake='pkill guake'
이는 출력의 프로세스 테이블을 구문 분석하는 것보다 훨씬 안전합니다 ps
.
그렇다면 이제 별칭이 원하는 대로 작동하지 않는 이유를 설명하겠습니다. 하지만 실제로는사용pkill
.
당신의 별칭
alias killguake="kill -9 $(ps aux | grep guake | head -n -1 | awk '{print $2}')"
큰따옴표 안에 있습니다. 이는 쉘이 쉘 초기화 스크립트에서 이 행을 구문 분석할 때 명령 대체( $( ... )
)를 수행한다는 것을 의미합니다. 따라서 파일이 실행될 때마다 나중에 종료할 별칭을 제공하는 대신 실행 중인 프로세스를 guake
종료할 별칭을 제공합니다.guake
지금.
별칭을 나열하면(을 사용하여 alias
) 별칭이 다음과 같이 표시됩니다.
killguake='kill -9 91273'
아니면 그냥
killquake='kill -9'
guake
쉘이 시작될 때 실행되고 있지 않은 경우 .
이 문제를 해결하기 위해(그러나 실제로는그냥 사용pkill
) 작은따옴표를 사용하고 Awk 스크립트에서 이를 이스케이프해야 합니다 $
(이제 큰따옴표 사용).
alias killguake='kill -9 $(ps aux | grep guake | head -n -1 | awk "{print \$2}")'
하나일반적으로 이 접근 방식의 문제점은 다른 사용자에게 속한 프로세스를 일치시킨다는 것입니다. 또 다른 이유는 grep guake
예상되는 프로세스가 아닌 명령 만 찾을 수 있다는 것입니다 . 또 다른 방법은 프로세스를 찾을 수 없으면 오류가 발생한다는 것입니다. 또 다른 상황은 5개의 외부 유틸리티를 호출하여 그 중 하나의 작업을 수행하는 경우입니다.
답변2
pkill을 사용하세요. 바퀴를 재발명하지 마세요!
alias killguake="pkill -9 guake"