De man bash
em EXPRESSÕES CONDICIONAIS :
-t fd
True if file descriptor fd is open and refers to a terminal.
Assumindo que fd 1 é padrão, if [ -t 1 ]; then
deve funcionar para você. O Guia de scripts do Shell avançado afirma que -t
usado dessa maneira falhará em ssh
, e que o teste (usando stdin, não stdout) deveria ser:
if [[ -t 0 || -p /dev/stdin ]]
-p
testa se um arquivo existe e é um pipe nomeado. No entanto, , notei experimentalmente que isso não é verdade para mim: -p /dev/stdin
falha para ambos os terminais normais e sessões ssh enquanto if [ -t 0 ]
(ou -t 1
) funciona em ambos os casos (ver também Gilles comentários abaixo sobre os problemas nessa seção do Guia de Scripts de Shell Avançado .
Se o problema principal é um contexto especializado do qual você deseja chamar o script para se comportar de maneira apropriada a esse contexto, você pode evitar todos esses aspectos técnicos e poupar-se de alguma confusão usando um wrapper e uma variável personalizada:
!#/bin/bash
export SPECIAL_CONTEXT=1
/path/to/real/script.sh
Chame isso de live_script.sh
ou qualquer outra coisa e clique duas vezes em vez disso. É claro que você poderia realizar a mesma coisa com argumentos de linha de comando, mas um wrapper ainda seria necessário para apontar e clicar em um trabalho de navegador de arquivos da GUI.