grep не будет работать после замены стандартного ввода и стандартной ошибки - PullRequest
0 голосов
/ 25 сентября 2018

Я запускаю команду и хочу исключить строки, содержащие «nohup», из стандартной ошибки.Для этого я меняю стандартный ввод и стандартную ошибку и фильтрую «nohup».Затем я снова меняю их, чтобы вернуться в исходное состояние.Вот так:

nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3 &

Затем я делаю ти в файл и отфильтровываю пароль:

nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3  | tee FILE.log | grep -v "password" &

Что я не могу понять, так это то, почему grep -v "password" не будетработа здесь.

Если я не делаю двойной обмен файловыми дескрипторами, он делает:

nohup COMMAND  | tee FILE.log | grep -v "password" &

Есть ли у вас какие-либо идеи по этому поводу?

1 Ответ

0 голосов
/ 26 сентября 2018

В nohup COMMAND 3>&1 1>&2 2>&3 | grep -v nohup 3>&1 1>&2 2>&3 вы обменяли stdout и stderr на nohup, а прежний stderr перешел к каналу.Куда уходит прежний stdout?Куда бы ни указывал первоначально stderr, который, по-видимому, является терминалом.Своп для grep не повлияет на , что .

Вам, вероятно, нужно сделать что-то вроде:

(nohup COMMAND 2>&1 1>&3 | grep -v nohup 1>&2) 3>&1 | tee FILE.log | grep -v "password" &

Или использовать замену процесса bash для отправки просто stderrgrep:

nohup COMMAND 2> >(grep -v nohup >&2) | tee FILE.log | grep -v "password" &
...