
OS X端末のstdinにテキストを入力する場合、1行の制限は1024文字です。たとえば、cat > /dev/null
それより長い行を入力(または貼り付け)すると、ビープ音が鳴り、より多くの文字を許可しません。問題の例は、最初の長い行のブロックをcat | wc -c
使用して貼り付けたテキストの文字数を数えたい場合です。cat
これは標準入力に貼り付けるときに発生する一般的な問題のようです。 1行に1024文字という標準入力制限を削除したり、より高い制限に増やすことはできますか?
行の長さが1024文字を超えるテキストを貼り付けたいので、これが必要です。
「heredoc」を使用して長い行を問題なく貼り付けることもできますが、これによりシェルの履歴<< EOT
に不要なテキストが表示されます。
答え1
端末デバイスの回線規則内の回線エディタバッファの制限にすることができます。
Ctrl+D中間部分を押して長い行を入力するか(現在入力されている部分が行エディタに送信され、更新されるようにcat
)、行エディタを完全に無効にできる必要があります。
たとえば、次を使用する場合zsh
:
STTY=-icanon cat > file
Backspaceその他の編集機能は利用できませんのでご注意ください。また、Ctrl-C停止を押す必要がありますcat
。
他のシェルの場合:
s=$(stty -g); stty -icanon; cat > file
以下は:
stty "$s"
それ以外の場合:
stty -icanon; cat > file
stty sane
もちろん、
cat | wc -l
または
wc -l
不可能。Ctrl+Cフォアグラウンドプロセスグループ内のすべてのプロセスが終了するためです。
次のことができます。
STTY=-icanon cat | (trap '' INT; wc -l)
STTY='eol " "' wc -l
これにより、スペースに入るたびにバッファがフラッシュされます。まだ標準モードになっているので、変更を続けることができます。性格(線と反対)Ctrl+DEOFを表すために使用されます。
または:
STTY='-icanon min 0 time 30' wc -l
入力が中断されてから3秒後にEOFが表示されます。または:
STTY=-icanon sed -n '/^EOF$/q;p' | wc -l
次にEOF
(1行に3文字)を入力して項目を終了します。
〜のようにGillesが提案した、可能であれば(通常いいえたとえば、telnet / sshセッション)pbpaste
を貼り付ける代わりに使用してください。 (OSXではX11では、またはxsel
.xclip
を呼び出します。):
pbpaste | wc -l
これにより、バッファに存在する可能性のある特定の制御文字をコピーして貼り付けるときに発生する問題も回避できます^C
。