Por que a linha de leitura do Bash às vezes tenta analisar a segunda palavra de um comando fora de contexto?

2

Eu recentemente migrei todos os meus dotfiles e os configurei para um novo laptop rodando o Ubuntu 13.04, e tenho notado um comportamento estranho que nunca vi antes. Essencialmente, parece que meu terminal às vezes tenta analisar os comandos da direita para a esquerda, em vez do modo normal. Ele não é consistente de forma alguma e, muitas vezes, digitar o mesmo comando duas vezes produzirá resultados diferentes.

Exemplo:

 ⋯  www  localwork  cd ~/Downloads
bash: /home/goldenapples/Downloads: Is a directory

 ~  cd ~/Downloads
 ~  Downloads  ls

Então, o primeiro comando parece ter sido analisado como cd ~; Downloads , mas na segunda vez que eu digitei o mesmo comando, ele funcionou bem.

O mesmo acontece com aliases. Aqui eu tenho gp aliased para git push :

 ~  Documents  infostats-theme   master  gp
usage: git [--version] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           [-c name=value] [--help]
           <command> [<args>]

    [...]

See 'git help <command>' for more information on a specific command.
The program 'push' is currently not installed. You can install it by typing:
sudo apt-get install heimdal-clients

 ~  Documents  infostats-theme   master  gp
Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 1.69 KiB, done.
Total 14 (delta 12), reused 0 (delta 0)
To [email protected]:janrain/statboard.git
   cf86529..3208e21  HEAD -> master:wq

Não faço ideia do que aconteceu lá. Meus apelidos bash foram processados no primeiro exemplo, e ele leu corretamente a linha como git push , mas não sei o que aconteceu depois disso. Parece que ele tentou analisar o comando como git; push; e, assim, mostrou a tela de ajuda do git e, em seguida, exibiu um erro que nenhum programa chamado push foi instalado. A coisa mais óbvia é: digitar o mesmo comando imediatamente depois funcionou bem.

Este é um daqueles problemas que eu acabei de inventar porque não faz sentido. A única coisa que posso identificar é que o comportamento problemático parece acontecer quando estou digitando de maneira especialmente rápida, e a lentidão e a redigitação do comando às vezes fazem com que funcione.

Estou usando principalmente o Bash dentro do tmux 1.8, se isso ajudar.

Atualização:

Adicionando esta linha ao meu .tmux.conf :

set-option -g default-command "exec /bin/bash --norc"

parece ter resolvido o problema ... ou pelo menos eu não consegui causar isso novamente desde então. Mas ainda não faço ideia de por que ou como, e adoraria uma explicação.

    
por goldenapples 20.08.2013 / 21:15

2 respostas

2

Parece que algo está analisando espaços como retornos.

Você pode remover o tmux da situação (tente trabalhando em um console ou terminal virtual)?

Além disso, verifique a configuração do IFS, assim:

$ echo ":$IFS:" | cat -vte
: ^I$
:$

(então, SPace, TAB, Return).

Algum outro dos comandos problemáticos está com implementado como funções de mesmo nome como um comando?

Tente "\ cd ..." ou "comando cd" para contornar.

Além disso, para diagnóstico, tente usar a tecla TAB para espaço em branco intra-comando em vez de SPace, e / ou o avanço de linha (Ctrl-J) em vez de Retornar (Ctrl-M).

    
por 20.08.2013 / 23:54
1

Para depurar esses problemas, você pode tentar ativar a impressão de linhas de comando e de entrada que o bash está processando durante a análise de uma entrada:

set -v -x

Para desativá-lo novamente, você pode usar set +v +x . Às vezes, coisas muito estranhas acontecem em segundo plano.

    
por 29.08.2013 / 03:05