Si può mettere un reindirizzamento su una lista di comandi:
{
command1
command2
} >/dev/null
Se ad un certo punto nello script non si vuole alcun output di comandi successivi, è possibile reindirizzare uscita della shell con il exec
incorporato:
echo interesting
exec >/dev/null
echo boring
noti che questo dura fino alla fine dello script, non solo fino alla fine di una funzione. Questo si prende cura dei comandi dopo quello interessante ma non prima.
C'è un modo per annullare l'effetto di exec /dev/null
, utilizzando le manipolazioni del descrittore di file. Non lo raccomando necessariamente, però, perché può essere difficile allenarsi in pratica. L'idea è quella di spostare qualsiasi cosa sia collegata allo standard output in un diverso descrittore, quindi reindirizzare l'output standard in un file diverso e, infine, riposizionare l'output standard originale sullo standard output.
{
exec 3>&1 # duplicate fd 3 to fd 1 (standard output)
exec >/dev/null # connect standard output to /dev/null
echo boring
exec 1>&3 # connect standard output back to what was saved in fd 3
echo interesting
exec >/dev/null # connect standard output to /dev/null again
echo more boring
} 3>/dev/null # The braced list must have its fd 3 connected somewhere,
# even though nothing will actually be written to it.
'r = $ (a); echo $ r' potrebbe ovviamente essere sostituito con solo' a'. –