当我运行该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 的ps
命令可以模拟ps
各种 Unix 风格的实现。将环境变量设置PS_PERSONALITY
为 ,bsd
使其默认接受-aux
“使用传统 BSD 列集列出所有进程”的含义。从 shell 脚本:
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
命令是子例程的一部分 - 如果它是您调用的 shell 函数或 shell 脚本,则此解决方案有效source
;如果执行包含该命令的 shell 脚本,则不起作用ps
。
您可以使用名称定义一个 shell 函数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