Como controlar o buffer de pipes nos scripts do bash?

5

Eu preciso que meu script seja executado com stdbuf -i0 -o0 -e0 caso contrário, o usuário se perguntará por que não há saída (por causa do buffer de tubulação). Como posso conseguir isso?

#!/usr/bin/stdbuf -i0 -o0 -e0 /bin/bash

resulta em

/usr/bin/stdbuf: invalid mode ‘0 -o0 -e0 /bin/bash’
    
por Rumca 22.02.2014 / 22:53

2 respostas

7

Geralmente não há necessidade de unbuffer todo o script. Isso é necessário apenas com determinados programas.

Mas se você quiser fazer isso, basta chamar o script de si mesmo:

#! /bin/bash

if [ yes != "$STDBUF" ]; then
    STDBUF=yes /usr/bin/stdbuf -i0 -o0 -e0 "$0"
    exit $?
fi
    
por 22.02.2014 / 23:49
0

Aparecem duas soluções abaixo do ideal:

Suboptimal, pelo menos, quando você fornece entrada para o comando. Caso contrário, eles podem ser ambos ok. script registra sua entrada e unbuffer simplesmente não permite a entrada correta. YMMV

    
por 22.07.2016 / 23:22