ps -ef | grep catalina | grep -v grep
시스템에서 실행 중인 Tomcat 프로세스를 인쇄하는 데 사용합니다 .
kshitiz 7099 1 0 May11 ? 00:02:29 /usr/lib/jvm/jdk1.8.0/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:38156 -Dcatalina.base=/home/kshitiz/Documents/workspaces/ggts/.metadata/.plugins/org.eclipse.wst.server.core/tmp1 -Dcatalina.home=/opt/tomcat-7.0.42 -Dwtp.deploy=/home/kshitiz/Documents/workspaces/ggts/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps -Djava.endorsed.dirs=/opt/tomcat-7.0.42/endorsed -Dfile.encoding=UTF-8 -classpath /opt/tomcat-7.0.42/bin/bootstrap.jar:/opt/tomcat-7.0.42/bin/tomcat-juli.jar:/usr/lib/jvm/jdk1.8.0/lib/tools.jar org.apache.catalina.startup.Bootstrap start
ps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'
그런 다음 프로세스 ID를 추출하는 데 사용합니다 .
7099
그러나 전체 명령에 별칭을 지정 alias tomcat_id="ps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'"
하고 별칭을 통해 사용하면 전체 텍스트가 인쇄되고 awk
작동하지 않는 것 같습니다.
type tomcat_id
다음을 제공합니다:
tomcat_id is aliased to `ps -ef | grep catalina | grep -v grep | awk -F' ' '{print }''
답변1
별칭의 일반 규칙: 별칭에 비해 너무 복잡해지면 대신 함수를 사용하세요.
tomcat_id () {
ps -ef | grep catalina | grep -v grep | awk -F' ' '{print $2}'
}
별칭 정의의 문제는 인용이 잘못되었다는 것입니다. 별칭을 정의하는 행은 셸 명령이며 셸에서 구문 분석됩니다. 큰따옴표를 사용했고 당시에는 위치 매개변수가 없었을 것이므로( $2
빈 문자열로 확장됨) 정의한 별칭은 다음과 같습니다.
ps -ef | grep catalina | grep -v grep | awk -F' ' '{print }'
별칭을 정의하는 쉬운 방법은 정의에 작은따옴표를 사용하고 별칭이 지정된 명령에서는 작은따옴표를 사용하지 않는 것입니다. 그 동안 어쨌든 기본값인 를 제거했습니다 -F " "
(그리고 "공백"처럼 보이지만 "공백의 연속"을 의미하기 때문에 약간 이상합니다).
alias tomcat_id='ps -ef | grep catalina | grep -v grep | awk "{print \$2}"'
'\''
또는 작은따옴표 리터럴 내에서 작은따옴표를 효과적으로 인용하는 데 사용할 수 있습니다 .
alias tomcat_id='ps -ef | grep catalina | grep -v grep | awk '\''{print \$2}'\'
하지만 위에서 쓴 것처럼 함수를 사용하면 더 명확해집니다. 또는 작업에 적합한 도구를 사용하십시오.
alias tomcat_id='pgrep catalina'
또는
alias tomcat_id='pidof catalina'
답변2
Gnouc의 답변은 완벽하게 유효하지만(그래서 제가 추천한 이유입니다) 대안을 제시하고 싶습니다.
alias tomcat_id="ps -ef|awk '\$8 ~ /java/ && /catalina/ {print \$2}'"
여기서 아이디어는 프로세스 이름(필드 8)에서 를 찾을 수 있어야 java
하고 줄 전체에서 를 찾아야 한다는 것입니다 catalina
.
그래서 우리는 awk
매칭과 인쇄 작업을 모두 하게 됩니다. 귀찮게 할 필요가 없습니다 grep
;)
따라서 의미는 다음과 같습니다.
$8 ~ /java/ && /catalina/ {print $2}
는 $8
정규식과 필드를 일치시키고 정규식 /java/
과 전체 줄을 일치시키고( $0
명시적으로 사용할 수도 있음) /catalina/
이러한 사항이 true이면 print field 입니다 $2
. Gnouc의 답변에 이미 언급된 내용을 기억하십시오. 기본 구분 기호는 이미 공백입니다. 이것을 정의할 필요가 없습니다.
답변3
awk
명령 에서 달러 기호를 이스케이프해야 합니다 .
alias tomcat_id="ps -ef | grep catalina | grep -v grep | awk '{print \$2}'"
-F' '
을 사용할 필요가 없으며 awk
공백을 기본 필드로 별도로 사용하십시오.