2014-02-12 3 views
0

이름으로 프로세스를 검색하고 해당 프로세스가 주어진 값을 초과하면 결과를 반환하기 위해 쓰는 쉘 스크립트가 있습니다.쉘 스크립트 내에서 awk에 변수 전달하기

먼저 명명 된 프로세스를 찾는 중입니다. 이 스크립트는 현재 다음과 같습니다.

#!/bin/bash 

findProcessName=$1 
findCpuMax=$2 
#echo "parameter 1: $findProcessName, parameter2: $findCpuMax" 

tempFile=`mktemp /tmp/processsearch.XXXXXX` 
#echo "tempDir: $tempFile" 

processSnapshot=`ps aux > $tempFile` 

findProcess=`awk -v pname="$findProcessName" '/pname/' $tempFile` 
echo "process line: "$findProcess 

`rm $tempFile` 

변수를 awk 명령에 전달하려고하면 오류가 발생합니다. awk의 제 버전을 확인했고 그것은 확실히 -v 플래그를 지원합니다.

findProcess 변수 할당의 '/pname/' 부분을 바꾸면 스크립트가 작동합니다.

구문을 검사 해 보았습니다. 아무도 내가 잘못 가고있는 것을 지적 할 수 있습니까? 당신이 변수로 패턴을 통과 할 때의 PS 출력은 파일

  • 로가는 패턴 일치 연산자를 사용합니다 :

  • 답변

    2
    1. processSnapshot항상 비어 있습니다

      findProcess=$(awk -v pname="$findProcessName" '$0 ~ pname' $tempFile) 
      
    2. 명령의 출력이 필요할 때만 백틱을 사용하십시오. 이

      `rm $tempFile` 
      

      가 출력 비 비어, rm 명령을 실행하는 쉘에 다시 출력을 반환하고, 쉘 시도 명령으로 그 출력을 실행합니다.

      $ `echo foo` 
      bash: foo: command not found 
      $ `echo whoami` 
      jackman 
      

      backticks를 제거하십시오.

    물론, 당신은 모든 임시 파일이 필요하지 않습니다

    pgrep -fl $findProcessName 
    
    +0

    우수함! 고맙습니다. 또한, "pgrep 사용"이라고 말하는 것이 아니라 쉘 스크립트의 잘못된 부분에 대해 설명해 주셔서 감사합니다. 나는 쉘 스크립트 (shell scripting)에서 여전히 아주 친환경적이어서, 설명 된 것들을 가지고있는 것이 매우 도움이된다. –

    관련 문제