webdevqa.jp.net

tcsh(mac OS X)に貼り付けるときのコマンド制限

TCシェル(/ bin/tcsh)を実行しているターミナルアプリケーション(最大OS X 10.5.8)にコマンドを貼り付けるときに、1024文字の制限の問題が発生しました。

これは、次のコマンドをターミナルアプリに貼り付けることで一貫して再現できます。

 echo 0 0 0 0 0 
 echo 1 1 1 1 1 
 echo 2 2 2 2 2 
 echo 3 3 3 3 3 
 echo 4 4 4 4 4 
 echo 5 5 5 5 5 
 echo 6 6 6 6 6 
 echo 7 7 7 7 7 
 echo 8 8 8 8 8 
 echo 9 9 9 9 9 
 echo 10 10 10 10 10 
 echo 11 11 11 11 11 
 echo 12 12 12 12 12 
 echo 13 13 13 13 13 
 echo 14 14 14 14 14 
 echo 15 15 15 15 15 
 echo 16 16 16 16 16 
 echo 17 17 17 17 17 
 echo 18 18 18 18 18 
 echo 19 19 19 19 19 
 echo 20 20 20 20 20 
 echo 21 21 21 21 21 
 echo 22 22 22 22 22 
 echo 23 23 23 23 23 
 echo 24 24 24 24 24 
 echo 25 25 25 25 25 

最初は期待どおりに機能しますが、ある時点で失敗します。

 myself @ mymac |〜> echo 1 1 1 1 1 
 1 1 1 1 1 
 myself @ mymac |〜> echo 2 2 2 2 2 
 2 2 2 2 2 
など。など(良い)
 myself @ mymac |〜> echo 21 21 21 21 21 
 21 21 21 21 21 
 myself @ mymac |〜> echo 22 22 22 echo 22 22 22 echo 23 23 
 22 22 22 echo 22 22 22 echo 23 23 
 echo 24 24 24 24 24 
 echo 25 25 25 25 25 
(悪い-意味不明)

そのため、しばらくすると混乱します。実際、1行に44文字と改行用に1文字あり、問題は23行目の文字34で発生します。つまり、問題は45 * 22 + 34 = 1024文字の後に発生します。それは明らかにどこかに設定されている制限です...誰かがそれを拡張してより多くの文字と行を受け入れることができるようにする方法を知っていますか?

Tcshを搭載したLinuxマシンでも同じことを試しましたが、問題はありませんでした。だから私はこれがどこかで微調整できると確信しています。

6
pygri

発生している制限は、tty先行先行バッファのようです。 Mac OSXカーネルでは「ハードコーディング」されています。

xnu-1504.9.17は10.6.5に対応しますが、これらのビットは少なくとも10.4以降変更されていません。

コマンドを実行するだけで、入力と出力が奇妙な方法でインターリーブされることを気にしない場合は、一時的にtcshを無効にすることができます。貼り付ける前にunset editを使用して)のコマンドラインを編集します(set editを使用して再度有効にします)。これにより、ttyが「正規モード」に切り替わり、入力はラインベースになります。これにより、シェルは貼り付けられたテキストの受信に「追いつく」ことが容易になります。

すべてのttyベースのプログラムにこの問題があるわけではありません。 GNU Emacs21.2.1、Vim7.3、およびbash4.1すべてが大きなペーストに「追いつく」ことができるようです(私は8201バイトを試しました;Vimbashは遅かったが、ペースト全体を問題なく受け入れた)。

5
Chris Johnsen