명령 을 실행하면 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_PERSONALITY
bsd
-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
.
ps
STDERR 리디렉션과 같이 출력을 일부 수정하여 경로의 명령을 대체하고 실제 명령 자체를 호출하는 이름으로 셸 함수를 정의할 수 있습니다.
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