grep 명령에서 정크 옵션 오류를 방지하는 방법

grep 명령에서 정크 옵션 오류를 방지하는 방법

서버에서 프로세스가 실행되고 있는지 확인해야 합니다. 하지만 문제는 내가 사용하는 키워드가 userid가 아니라 o/p 또는 ps 명령의 일부라는 것입니다.

내가 달릴 때 ps -ef | grep -v $$ | grep xenon내가 얻는 것은

오류: 정크 옵션

사용법: ps [옵션]

추가 도움말 텍스트를 보려면 "ps --help" 또는 "ps --help"를 사용해 보십시오.

자세한 내용은 ps(1)을 참조하십시오. 크세논이 실행되지 않습니다. 오류를 확인하세요: 정크 옵션

서버에서 어떤 이유로 pgrep내 문제를 해결할 수 있는 O/P를 볼 수 없습니다. 서버운영자입니다.

$ps -ef | grep xenon
venom   3157  95310  0 23:08 pts/5    00:00:00 grep --color=auto xenon
root      45943      1  0 Apr12 ?        00:17:47 /opt/xenon/sganet/agent/lib64/sganetwatchdog -vm=/opt/xenon/sganet/agent/lib64/sganetos -logdir /opt/xenon/sganet/log -ini ../conf/ruxitwatchdog.ini
root      45981  45943  2 Apr12 ?        08:20:31 /opt/xenon/sganet/agent/lib64/sganetos -Dcom.compuware.apm.WatchDogTimeout=9000 -Dcom.compuware.apm.WatchDogPort=5000
$pgrep xenon
$pgrep -c xenon
0
$

기본적으로 검증 서버에서 실행되는 여러 프로세스를 확인하기 위해 작성한 스크립트입니다.

#!/bin/bash
set +x
USER=`whoami`
#pg='ps -ef | grep -v $USER | '
pg='ps ax | grep -v grep | '
#--------function to check process ---------#
check_process() {

  $pg $1 >/dev/null && echo -e "$1 is running" || echo -e "$1 is not running, please check "
}

#--------Checking process on the server---------#

echo -e "\n\n checking the processes"
check_process xenon
check_process upnew

답변1

쉘 매개변수 확장이 발생합니다.뒤쪽에파이프라인의 고급 분석줄을 구조화된 명령으로 분할하여 함수 본문이 작성한 대로 실행되도록 합니다.

ps ax '|' grep -v grep '|'

- 즉, 파이프를 리터럴 인수로 사용합니다 ps. 그렇기 때문에 오류가 발생합니다.~에서ps(not from grep!) 은 인수를 이해하지 못한다고 불평합니다 |.

이 문제는 여러 가지 방법으로 해결할 수 있습니다.

  1. 변수를 사용하는 대신 함수에 명령을 작성하면 됩니다 pg. 이것은 나에게 가장 좋은 버전인 것 같지만 실제 스크립트는 더 복잡할 수 있습니다.
  2. 비슷한 것이 정말로 필요한 경우 파이프를 포함하는 함수를 사용하십시오.

    pg_cmd_1() {
        ps ax | grep -v grep | $1
    }
    pg=pg_cmd_1
    

    그리고 그대로 진행하세요. 이를 통해 다른 함수를 정의하고 pg변수를 동적으로 변경하여 필요할 때 사용할 수 있습니다.


또한 현재 작성된 대로 스크립트가 실행을 시도하고 있는데 ps ax | grep -v grep | xenon아직 원하는 것이 아닌 것 같습니다(하나가 누락되었나요 grep?).

관련 정보