最近、すべてのドットファイルと設定をUbuntu 13.04を実行している新しいノートブックに移行しましたが、以前に見たことのない奇妙な動作を発見しました。デフォルトでは、端末は通常の方法ではなく、右から左にコマンドを解析しようとすることがあります。まったく一貫性がなく、同じコマンドを2回入力すると、異なる出力が生成されることがよくあります。
例:
⋯ www localwork cd ~/Downloads
bash: /home/goldenapples/Downloads: Is a directory
~ cd ~/Downloads
~ Downloads ls
したがって、最初のコマンドは解析されたように見えますが、cd ~; Downloads
2番目に同じコマンドを入力すると正常に動作します。
エイリアスでも同じことが起こります。ここでは、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
。時にはバックグラウンドで本当に奇妙なことが起こります。