ラップすることなく端末から4k以上の入力をどのように読み取ることができますか?

ラップすることなく端末から4k以上の入力をどのように読み取ることができますか?

だからデータがたくさんあります。新しい行なしクリップボードに(大きなSVGファイル、1行)私は行きました

$ cat >file.svg

その後、Gnome端末から貼り付けようとしましたが、最初の4kB文字のみが許可されました。

私はこれがリードライン機能/制限事項だと思います。

この問題を回避するためにSTDINからデータを読み取る方法はありますか?

編集する

テストケース:デモファイルを生成します。これには約4kの「=」記号と「foo bar」があります。

{ printf '=%.0s' {1..4095} ; echo "foo bar" ; } > test.in

クリップボードにコピー

xclip test.in

(中央をクリックして挿入する場合)または

xclip -selection clipboard test.in

(Ctrl-Shift-Insertを使用して貼り付けたい場合)

次にcat >test.out(どちらか)貼り付けます。ストリームを終了するにはCtrl-Dを押します。cat test.out- 「プーバ」を見ましたか?

マイ設定(Ubuntu 12.04、Gnome Terminal、zsh)で貼り付ける=ときfoo bartest.out

ベストアンサー1

ソースコードを正しく理解したら、Linuxで端末が一度に読み取ることができる最大文字数は次のように決定されます。N_TTY_BUF_SIZEカーネルのソースコードから。これ4096です。

これは端末インタフェースの制限です。特に標準(「料理」)モードこれは非常に粗い行エディタ(バックスペースキー、Enterキー、Ctrl+Dファイルの終わりを表す行の先頭)を提供します。それは読書プロセスの外で完全に起こります。

端末をネイティブモードに切り替えてライン処理を無効にできます。また、プログラムに追加の負担をかけるCtrl+およびその他の詳細も無効になります。D

これは、電力不足のために修正されていない古いUnix制限です。人間はそんなに長い行を立てません。プログラムが入力を提供している場合は、ファイルまたはパイプからプログラム入力をリダイレクトできます。

たとえば、Xクリップボードの内容を使用するにはパイプを使用します。xselまたはxclip。あなたの場合:

xsel -b >file.svg
xclip -selection clipboard >file.svg

クリップボードの代わりに削除する-bか、X選択(マウスハイライトに設定されている選択)を使用してください。-selection clipboard

OSXでは、以下を使用してください。pbpasteクリップボードの内容を貼り付けてpbcopy設定します。

X11転送(一部のサーバーでは無効にすることができます)を有効にすると、ssh -XSSHを介してXクリップボードにアクセスできます。sshX11転送なしでのみ利用可能な場合scpsftpまたはを使用してsshfsファイルをコピーできます。

クリップボードを渡すことはできませんし、貼り付けることはできませんが、仮想マシンへの入力を偽造するため、貼り付けが唯一のソリューションである場合、もう1つのアプローチは、改行を使用してデータをエンコードすることです。Base64これに適しています。任意のデータを印刷可能な文字に変換してデコードするときは、スペースを無視します。このアプローチは、入力時に任意のデータをサポートし、貼り付けるときに端末が解釈する制御文字もサポートするという追加の利点があります。あなたの場合、コンテンツをエンコードできます。

xsel -b | base64 | xsel -b

その後、デコードします。

base64 -d
   Paste
Ctrl+D

おすすめ記事