使用或语句将输出管道输出到两个不同的命令

时间:2018-01-22 11:12:39

标签: bash

我将代码传递给python:

echo "print 'hello'" | python &

但在某些情况下,我需要将其传递给sudo python,但我不知道是否有必要。所以我需要一个or条件。如果python抛出错误,则应将其传送到sudo python。例如:

echo "print 'hello'" | python & | sudo python &

我该怎么做?

1 个答案:

答案 0 :(得分:1)

原则上,您可以管道进入条件。

echo "print 'hello'" |
#### BROKEN
if python; then
    : nothing
else
    sudo python
fi

这里的问题是第一个python可能会吃掉所有输入,然后sudo python不会收到来自管道的任何输入。处理这种情况的一种方法是使用临时文件。

tempfile=$(mktemp -t) || exit
# Clean up if interrupted or when done
trap 'rm -f "$tempfile"' EXIT ERROR HUP INT TERM
echo "print 'hello'" >"$tempfile"
python <"$tempfile" || sudo python <"$tempfile"