涉及sh -c和su的字符串传递时,如何使管道正常工作

问题描述 投票:0回答:1

我有以下命令

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

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

sh su
1个回答
0
投票
[java -version写入标准错误,而不是标准输出。

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

[2>&1将标准错误复制到标准输出,以便通过管道将其馈送到grep

也就是说,grep不必以root用户身份运行,前提是没有指定要使用su sh -c '...'来运行任意代码的对象使用管道。

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

© www.soinside.com 2019 - 2024. All rights reserved.