Как заставить трубу работать, когда она передана в строке для sh - c и задействован su - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть следующая команда

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

Но, похоже, что труба в grep не работает, так как печатает все строки независимо от

1 Ответ

1 голос
/ 25 февраля 2020

java -version записывает в стандартную ошибку, а не в стандартный вывод.

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

2>&1 копирует стандартную ошибку в стандартный вывод, так что она подается через канал и в grep.

Тем не менее, grep не нужно запускать как root, предполагая, что конвейер не определен для использования чем-то, что просто запускает произвольный код с использованием su sh -c '...'.

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