Bash readline이 때때로 문맥에 맞지 않는 명령의 두 번째 단어를 구문 분석하려고 시도하는 이유는 무엇입니까?

Bash readline이 때때로 문맥에 맞지 않는 명령의 두 번째 단어를 구문 분석하려고 시도하는 이유는 무엇입니까?

최근에 모든 도트 파일과 설정을 Ubuntu 13.04를 실행하는 새 노트북으로 마이그레이션했는데 이전에 본 적이 없는 이상한 동작을 발견했습니다. 기본적으로 터미널에서는 일반적인 방법 대신 오른쪽에서 왼쪽으로 명령을 구문 분석하려고 시도하는 경우가 있습니다. 전혀 일관성이 없으며 동일한 명령을 두 번 입력하면 다른 출력이 생성되는 경우가 많습니다.

예:

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

 ~  cd ~/Downloads
 ~  Downloads  ls

따라서 첫 번째 명령은 구문 분석된 것처럼 보이지만 cd ~; Downloads두 번째로 동일한 명령을 입력하면 제대로 작동합니다.

별칭에서도 같은 일이 발생합니다. 여기서는 gp다음과 같이 별칭을 지정 했습니다 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

거기서 무슨 일이 일어났는지 모르겠어요. 내 bash 별칭은 첫 번째 예에서 처리되고 행을 다음과 같이 올바르게 읽습니다 git push. 하지만 그 이후에는 어떤 일이 발생하는지 알 수 없습니다. 명령어를 파싱하려는 것 같아서 git; push;git 도움말 화면을 띄운 뒤 push해당 프로그램이 설치되지 않았다는 오류를 출력합니다. 이상한 점은 동일한 명령을 입력한 직후에 제대로 작동한다는 것입니다.

이것은 말이 안 되기 때문에 제가 안고 살아가는 문제 중 하나입니다. 제가 지적할 수 있는 유일한 점은 특히 빠르게 입력할 때 문제가 있는 동작이 발생하는 것 같고, 명령을 느리게 입력하고 다시 입력하면 때때로 작동한다는 것입니다.

나는 주로 tmux 1.8과 함께 Bash를 사용하고 있습니다. 그것이 도움이 된다면 말이죠.

고쳐 쓰다:

내 줄에 다음 줄을 추가했습니다 .tmux.conf.

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

문제가 해결된 것 같습니다. 아니면 적어도 그 이후로는 문제를 일으킬 수 없습니다. 하지만 아직 이유나 방법을 모르므로 설명을 듣고 싶습니다.

답변1

뭔가 공백을 다시 구문 분석하는 것 같습니다.

이 상황에서 tmux를 제거할 수 있습니까(콘솔이나 가상 터미널에서 작업해 보십시오)?

또한 IFS 설정을 확인하여 다음을 수행하십시오.

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

(그러므로 공백, TAB, Enter).

다른 문제가 있는 명령에 별칭이 있거나 명령과 동일한 이름을 가진 함수로 구현된 것이 있습니까?

해결하려면 "\cd ..." 또는 "cd 명령"을 시도해 보세요.

또한 진단 목적으로 명령 내에서 공백 대신 TAB 키를 사용하거나 Return(Ctrl-M) 대신 줄 바꿈(Ctrl-J)을 사용해 보십시오.

답변2

이러한 문제를 디버깅하려면 입력 구문 분석 중에 bash가 처리하는 명령 및 입력 줄의 인쇄를 켜 볼 수 있습니다.

set -v -x

다시 끄려면 을 사용하면 됩니다 set +v +x. 때로는 백그라운드에서 정말 이상한 일이 발생합니다.

관련 정보