Usando o exemplo da resposta por caos :
echo "to screen" >$(tty)
não funcionou para mim. Recebo um erro ao tentar usá-lo:
./myscript.sh: line xx: /dev/pts/3: Permission denied
Eu criei uma solução para usar outro descritor de arquivos (9). Aqui está "./myscript.sh":
#!/bin/sh -u
## This is placed one time at the top of the script
## to detect if file descriptor (9) is available for writing.
if [ ! -t 3 ]; then
echo "Error, file descriptor (9) not open on terminal." >&2
echo "" >&2
if [ ! -t 2 ]; then
echo "Error, file descriptor (9) not open on terminal."
echo ""
fi
exit 1
fi
echo "Message A: This writes to stdout or wherever '1>' redirects to."
echo "Message B: This writes to stdout or wherever '1>' redirects to.">&1
echo "Message C: This writes to stderr or wherever '2>' redirects to.">/dev/stderr
echo "Message D: This writes to stderr or wherever '2>' redirects to.">&2
echo "Message E: Write this to 'screen' regardless of '1>/2>' redirection." >&9
echo " " >&9
Eu usei o descritor de arquivo 9
para enviar as mensagens de "status", mas outros descritores de arquivos válidos devem funcionar.
Para usá-lo, ao chamar o script, você deve incluir o redirecionamento do descritor de arquivo (9) para STDOUT (9 > & 1) como o primeiro redirecionamento.
Aqui está a saída quando eu chamo "./myscript.sh":
[~]# ./myscript.sh
[~]# ./myscript.sh >/dev/null
[~]# ./myscript.sh 2>/dev/null
Error, file descriptor (9) not open on terminal.
[~]# ./myscript.sh >/dev/null 9>&1
Error, file descriptor (9) not open on terminal.
[~]# ./myscript.sh 9>&1 >/dev/null
Message C: This writes to stderr or wherever '2>' redirects to.
Message D: This writes to stderr or wherever '2>' redirects to.
Message E: Write this to 'screen' regardless of '1>/2>' redirection.
[~]# ./myscript.sh 9>&1 2>/dev/null
Message A: This writes to stdout or wherever '1>' redirects to.
Message B: This writes to stdout or wherever '1>' redirects to.
Message E: Write this to 'screen' regardless of '1>/2>' redirection.
[~]# ./myscript.sh 9>&1 >/dev/null 2>&1
[~]# ./myscript.sh 9>&1 &>/dev/null
[~]# ./myscript.sh 9>&1 >&/dev/null
Message E: Write this to 'screen' regardless of '1>/2>' redirection.
[~]#