Bash readlineが時にコンテキストに合わないコマンドの2番目の単語を解析しようとするのはなぜですか?

Bash readlineが時にコンテキストに合わないコマンドの2番目の単語を解析しようとするのはなぜですか?

最近、すべてのドットファイルと設定をUbuntu 13.04を実行している新しいノートブックに移行しましたが、以前に見たことのない奇妙な動作を発見しました。デフォルトでは、端末は通常の方法ではなく、右から左にコマンドを解析しようとすることがあります。まったく一貫性がなく、同じコマンドを2回入力すると、異なる出力が生成されることがよくあります。

例:

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

 ~  cd ~/Downloads
 ~  Downloads  ls

したがって、最初のコマンドは解析されたように見えますが、cd ~; Downloads2番目に同じコマンドを入力すると正常に動作します。

エイリアスでも同じことが起こります。ここでは、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。時にはバックグラウンドで本当に奇妙なことが起こります。

関連情報