OK, isso se deveu a uma interação bizarra com minha configuração bash.
Eu tenho algo no meu .bash_profile
que coloca o comando atualmente executado no título da janela ou na guia screen
. Ele funciona usando um trap
:
trap 'bash_current_command' DEBUG
e antes disso:
function bash_current_command {
# only works in bash > 3.1
#set -- $BASH_COMMAND
# for old bash
set -- $(history 1)
shift
if [[ "$1" == "sudo" ]]; then
cmd="*$(basename -- "$2")*"
else
cmd="$(basename -- "$1")"
fi
bash_set_title "$cmd"
}
bash_set_title
é uma pequena função que define o título e o título do terminal atual usando códigos de escape ANSI. Como você pode ver, isso cria subshells $(...)
, e minha intuição me disse que esse poderia ser o problema. De fato, depois que mudei essas linhas, funcionou!
Se alguém souber por que isso acontece, ficarei feliz em saber detalhes. Os subshells geralmente roubam tty
de entrada? Ou é apenas um problema em uma armadilha de depuração? Eu não me lembro de problemas com stdin
regular de entrada / tubulação em comandos.
(Como você também pode ver, existem alguns problemas com a minha função de qualquer maneira - ela usa uma das subshells como uma solução alternativa para que possa rodar em uma versão arcaica do bash (eu estou preso a ela em um sistema legado, mas ainda assim queria uma configuração unificada.) O outro subshell é usado para extrair o comando real ao usar sudo
, mas isso falha se o sudo for chamado com opções como sudo -H -u user command
. Então considerarei isso como uma oportunidade para corrigir este código ...)