5

今日、私はemacsシェルで次のようなコマンドを実行しました。

./someBinary | grep foo | cut -c30- | sort | uniq -c

これはbashでは少し時間がかかりますが、出力が100万行を超えるので、それほど長くはありません(約15秒)。しかし、このコマンドをemacsシェルで実行したとき、1時間以上待っても実行されており、を確認するとプロセスが目に見えて動作していtopます。これは、emacsが私がパイプしているunixツールをlispで実装しているためか、これが理由であるかどうか、デフォルトでシステムのものにする方法があるかどうか疑問に思います。

4

3 に答える 3

3

Emacsはシェルバッファーに最終出力をキャプチャし、フォントロックやその他の分析(行番号のカウントなど)を適用して表示しています。また、ディスプレイをスクロールして最新の出力を表示します。Emacsには、病理学的に長いコマンド出力をカリングするための機能がありますが、数百万行を数える本当に大量の出力に最適化されていないため、ターミナルエミュレータよりも明らかにパフォーマンスが低下し、パイプライン全体の速度が低下します。

出力に興味がない場合は、/dev/nullまたはにリダイレクトしtail -500ます。これは、とにかく一般的なターミナルのスクロールバックで表示される量です。

于 2012-11-01T06:16:52.250 に答える
2

いいえ、emacsはこれらのツールを実装していません。これは、コマンドラインから実行するのと同じツールを実行しています。ただし、出力はさまざまなパイプを通過しており、おそらくemacsによってさまざまなフォーマットが適用されています。これは、極端な速度低下の原因である可能性が最も高いです。簡単に試すことができるのは、シェルバッファのフォントロックモードを無効にすることです。

于 2012-11-01T00:54:13.100 に答える
0

eshell使用するかどうかはわかりませんshell。私の経験では、shell問題なく動作しますがeshell、パイプに1,000本を超える線を引きたいものにはまったく使用できません(eshellの他の機能が非常に見栄えがするため、これは悲しいことです)。

を使用している限り、出力が1行だけであっても、eshellは遅いことに注意してください。したがって、遅い|のは実際の|演算子(eshellのemacs-lispに実装されている)のようです。

于 2016-01-27T09:36:51.227 に答える