当为 sh -c 传入字符串并涉及 su 时,如何让管道工作

How do I get pipe to work when passed in string for sh -c and su is involved

我有以下命令

su - root -s /usr/bin/sh -c "java -version|grep build"

但是 grep 的管道似乎不起作用,因为它无论如何都会打印所有行

java -version 写入标准错误,而不是标准输出。

su - root -s /usr/bin/sh -c "java -version <b>2>&1</b> |grep build"

2>&1 将标准错误复制到标准输出,以便它通过管道输入到 grep.

也就是说,grep 不必是 运行 作为根,假设管道没有被指定为仅供 运行 任意代码使用的东西使用su sh -c '...'.

su - root -s /usr/bin/sh -c 'java -version' 2>&1 | grep build