Linux에서 ps -aux의 경고 억제

Linux에서 ps -aux의 경고 억제

명령 을 실행하면 ps다음과 같은 경고가 표시됩니다 Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ.

이 경고를 어떻게 억제할 수 있습니까? 이를 위해 일부 시스템 설정을 수행해야 합니까? 내가 실행한 명령은 다음과 같습니다.

[root@localhost home]# ps -aux | grep "curl -s -o Test" 
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
root      4856  0.0  0.0   4044   672 pts/0    S+   07:20   0:00 grep curl -s -o Test
[root@localhost home]# 

위와 똑같은 명령을 실행해야 합니다. 로 변경할 수 없으며 -aux출력 을 aux리디렉션할 수도 없습니다 . STDERR그래서 경고를 억제할 수 있는 시스템 설정을 찾고 있는 것입니다.

답변1

Linux 명령은 다양한 Unix 스타일 구현을 ps에뮬레이트할 수 있습니다 . 기본적 으로 "기존 BSD 마샬링을 사용하여 모든 프로세스 나열"을 의미 하도록 ps환경 변수를 설정합니다 . 쉘 스크립트에서:PS_PERSONALITYbsd-aux

PS_PERSONALITY=bsd /command/you/cannot/modify

C에서:

setenv("PS_PERSONALITY", "bsd", 1);
function_you_cannot_modify();
unsetenv("PS_PERSONALITY");

답변2

추악한 대답은 다음과 같습니다. ps인수처럼 보이는 인수를 취하고 이를 삭제(적어도 교체로 -aux) aux한 다음 /bin/ps삭제된 인수로 호출하는 스크립트를 작성하는 것입니다. 전화해서 ps개인 bin디렉토리에 넣으세요.

답변3

사용자가 작성하는 명령 ps은 서브루틴의 일부입니다. 이 솔루션은 사용자가 호출하는 쉘 함수 또는 쉘 스크립트인 경우 작동합니다 source. 명령이 포함된 쉘 스크립트를 실행하는 경우에는 작동하지 않습니다 ps.

psSTDERR 리디렉션과 같이 출력을 일부 수정하여 경로의 명령을 대체하고 실제 명령 자체를 호출하는 이름으로 셸 함수를 정의할 수 있습니다.

function ps() {
    command ps "$@" 2>/dev/null
}

사용된 예 ls:

$ ls -d /etc /missing
ls: cannot access /missing: No such file or directory
/etc
$ function ls() {          
    command ls "$@" 2>/dev/null
}
$ ls -d /etc /missing
/etc

관련 정보