다른 명령에 대한 입력으로 한 명령의 셸 출력

다른 명령에 대한 입력으로 한 명령의 셸 출력

자동화하려고 해요Forever JS는 개발 ​​서버를 계속 실행합니다.이렇게 하려면 영구 프로세스를 확인하고 중지하여 다른 프로세스를 시작해야 합니다. 실행하여

sudo forever list

다음과 같은 결과가 나타납니다.

메시지: 영원히 실행되는 프로세스
데이터: 영원히 uid 명령 스크립트PID   ID 로그 파일 가동 시간       
데이터: [0] 0NQH /usr/bin/nodejs app.js 17047   17049    /home/ubuntu/.forever/0NQH.log 0:2:4:58.594

위의 출력에서 ​​​​필요합니다.PID이것은17049현재를 다음과 같이 다음 명령에 입력합니다.

sudo forever stop {{pidfromabove}}

이를 달성하기 위해 내 스크립트에서 주로 두 문자열 사이를 찾으려고 많은 노력을 기울였습니다.application.js그리고/집그러나 어떤 이유로 전체 줄을 계속 인쇄합니다. 나는 sed와 awk의 다양한 조합을 시도했습니다. 다음 명령에 제공하기 위해 위에서 pid를 어떻게 얻을 수 있습니까 stop?

답변1

이것은 의 사용 사례처럼 보입니다 awk. 관심 있는 PID가 항상 행의 7번째 요소가 되도록 출력 형식이 안정적이라고 확신하는 경우 PID가 인쇄됩니다 app.js.

sudo forever list | awk '/app\.js/ { print $7 }'

답변2

당신이 겪고 있는 문제는 아마도 출력이 stdout이 아닌 stderr에 있기 때문일 것입니다. 이 경우 다음을 시도해 볼 수 있습니다.

sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'

두 번째 PID에만 응답해야 합니다.

그러면 다음과 같이 할 수 있습니다:

sudo forever stop `sudo forever list 2>&1 | sed 's/.*app.js [0-9]* \([0-9]*\) /\1/'`

관련 정보