Risposte:
È possibile chiamare execnuovamente per ripristinare i descrittori originali. Dovrai averli salvati da qualche parte.
exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"
All'interno della parte registrata, è possibile utilizzare i descrittori originali per un comando reindirizzando ai descrittori aggiuntivi.
echo "30 seconds remaining" >&3
In alternativa, puoi inserire la parte registrata dello script in un comando composto e reindirizzare quel comando composto. Questo non funziona se si desidera utilizzare i descrittori originali in una trappola da qualche parte all'interno di quella parte reindirizzata.
{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"
Usa adddinal fd 3 e 4 per stdout e stderr e reindirizza semplicemente 1 e 2 a loro alla fine del tuo script:
exec 3>&1 4>&2
exec >script.log 2>&1
echo "Some code"
exec >&3 2>&4
echo "Done"
exec 3>/dev/stdout 4>/dev/stderr -bash: /dev/stdout: Permission denied
Per prima cosa dovresti controllare se hai un tty o meno.
if tty -s; then
echo "Hello, World" > $(tty)
fi
ttyutilità esterna . Puoi reindirizzare al dispositivo speciale /dev/tty.
>&3rendere questa la mia soluzione preferita. Grazie ancora)!