set -x: conclusão da tabulação resulta em saída confusa ao trabalhar no modo de depuração

3

Eu entendo que set -x coloca o usuário do Bash no modo de depuração e eu sinto que trabalhar em tempo integral no modo de depuração me ajudará a lidar melhor com possíveis problemas no Bash.

Eu tenho um problema ao trabalhar com set -x :

Quando tento usar a conclusão da guia nativa da minha distro (Ubuntu 16.04) para completar o nome de um diretório, recebo uma saída muito longa e confusa.

Por exemplo, $PWD é /var/www/html/ e eu executo um destes:

cd ~/u [conclusão da tabulação para completar u a ulcwe ]

cd ~ && cd u [conclusão da tabulação para completar u a ulcwe ]

Em ambos os exemplos, recebo uma saída muito longa e confusa:

+ return 0
+ local -a toks
+ local quoted x tmp
+ _quote_readline_by_ref '~/u' quoted
+ '[' -z '~/u' ']'
+ [[ ~/u == \'* ]]
+ [[ ~/u == \~* ]]
+ printf -v quoted '~%q' /u
+ [[ ~/u == *\* ]]
+ [[ ~/u == \$* ]]
++ compgen -d -- '~/u'
+ x='~/ulcwe'
+ read -r tmp
+ toks+=("$tmp")
+ read -r tmp
+ [[ -d != -d ]]
+ [[ -n '' ]]
+ [[ 1 -ne 0 ]]
+ compopt -o filenames
+ COMPREPLY+=("${toks[@]}")
+ return 0
lcwe/

Observe o lcwe no final.

A saída acima é apenas parte de uma saída muito maior.

Como eu poderia continuar trabalhando no modo de depuração em tempo integral ( set -x ), mas sem toda essa saída ao executar a conclusão da tabulação?

    
por user9303970 27.02.2018 / 18:54

1 resposta

2

Isto é devido ao recurso de conclusão programável do shell que você está usando.

Se você estiver satisfeito com a conclusão básica da guia para comandos e nomes de arquivos em bash , execute

complete -r

no seu ~/.bashrc removerá qualquer conclusão "fantasia" (programável) que envolva chamar funções etc. no ambiente atual do shell.

A conclusão básica do nome do arquivo (como o que você está fazendo nos exemplos da pergunta) ainda funcionará depois de desligar a conclusão programável.

A conclusão programável está disponível em alguns shells e permite conectar funções de retorno de chamada que examinam o estado da linha de comando, etc., para descobrir quais sequências possíveis o usuário pode querer inserir em seguida. Por exemplo, digitar ssh e, em seguida, Espaço e Tab pode invocar uma função que analisa seu arquivo ~/.ssh/config para possíveis nomes de host para se conectar ou digitar git checkout e então o Espaço e a Tab podem fazer com que uma função execute um comando git para descobrir quais ramificações estão disponíveis no repositório atual.

Alguns usuários contam com conclusões programáveis por motivos de velocidade e / ou produtividade, mas sim, se você tiver set -x ativo na sessão do shell interativa, essas ações produzirão saída de rastreio no terminal.

Eu nunca fui amigo da conclusão programável em nenhum shell, já que não quero uma simples tecla Tab para fazer "mágica nas minhas costas" . Eu também acho que é um pouco preguiçoso, mas essa definitivamente é apenas minha opinião pessoal.

    
por 27.02.2018 / 19:02