悪いコマンドの後にbashが一時停止する原因は何ですか?


23

間違ったコマンドを入力しているときは、次のことをしたいと言います。

$ cd ..
$ ls

しかし、代わりに入力が速すぎて、lとsの間でEnterキーを押すことになります。

$ cd ..
$ l
sbash: l: command not found...

これはもちろん、高速で入力するときに常に発生します。私が興味を持っているのは、悪いコマンドテキストが画面に表示された後の2.5秒(システム上)の一時停止の原因です。悪いコマンドを即座に認識し、エラーメッセージを出力しますが、楽しみのために2.5秒待ってからコマンドラインに戻ります。何が原因ですか?これを修正する方法はありますか?ちょっと面倒ですが、それを取り除きたいです。:)

編集:Fedora 16システムの実行


使用しているOSについて言及するのを忘れました。
ダニエルベック

おっと、lをlsにエイリアスしないのですか?:)
dotjoe

回答:


42

このタイプの動作は、bashにフックする一部のディストリビューションに頻繁にインストールされるツールが原因です。このフックにより、コマンドを実行しようとしてコマンドが存在しない場合、bashは構成されたリポジトリで使用可能なファイルを検索し、そのコマンドを取得するためにインストールする必要があるパッケージを通知します。

Debianシステムを使用していない場合は、bashスタートアップファイルのプロファイルなどを調べて、という名前の関数が定義されているかどうかを確認する必要がありますcommand_not_found_handle。そのbash関数が定義されている場合、コマンドを実行するたびに呼び出され、検索パスに適切なプログラムが見つかりません。typset | less出力を実行して参照すると、command_not_found_handle()定義されている関数が表示されます。

Debian / Ubuntuでは、この動作を提供するパッケージはcommand-not-foundです。これを削除すると、ルックアップが無効になり、処理が遅くなります。

ここに例があります

# command-not-found installed
$ time pwgen
The program 'pwgen' is currently not installed.  To run 'pwgen' please ask your administrator to install the package 'pwgen'
pwgen: command not found

real    0m0.074s
user    0m0.032s
sys     0m0.040s

# purge command-not-found and restart bash
$ time pwgen
-bash: pwgen: command not found

real    0m0.002s
user    0m0.000s
sys     0m0.000s

もちろん、正確な時間はあなたによって異なります。私はかなり頑丈なサーバーでテストを実行しました。


10
fedoraでの私のケースでは、PackageKit-command-not-found
Fuu

6

質問の一部は「これを修正する方法はありますか(Fedoraで)?」.bashrcファイルの下部にコマンドを追加します。

unset command_not_found_handle

.bashrcの上部で/ etc / bashrcまたは他のbashスクリプトを実行している可能性があるため、おそらく.bashrcの最後(またはそれに近い)に実行する必要があります。


5

fedoraでは、/etc/PackageKit/CommandNotFound.conf構成ファイルを変更することでこの動作を制御できます。

設定SoftwareSourceSearch=falseは、パッケージマネージャーを使用して不足しているコマンドでパッケージを見つけようとしないため、遅延を取り除きます。

MaxSearchTime=2000パッケージ検索が一致を返すまで待機するミリ秒数を示すオプションを変更することにより、代わりにパッケージ検索を待機する時間を変更することもできます。デフォルトの2秒は一致を返すのに十分な長さではなく、入力ミスがあると不必要な遅延を引き起こすだけです。

を上げてMaxSearchTime有用な出力を提供するか、無効SoftwareSourceSearchにして遅延を完全に排除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.