Непоследовательное поведение перенаправления ввода

Я написал файл размером 10000010 байт (99010 строк по 100 последовательных a ), названный big для экспериментов. Затем я скопировал весь текст в свой буфер обмена, запустил wc и вложил его в stdin . Затем я сделал простую переадресацию, которая должна иметь тот же эффект. Но это то, что я получил:

 $ wc[Enter] [paste 99010 lines of garbage copied directly from `big'] 99010 99010 10000010 $ wc < big 99010 99010 10000010 

Обратите внимание на разную ширину поля. Лучше всего предположить, что первый результат был напечатан с "%7d %7d %7d" , а второй с "%8d %8d %8d" .

Может кто-нибудь объяснить, как это возможно? У меня создалось впечатление, что в отношении wc вход для второго эксперимента также поступает из stdin (потому что оболочка позаботится о < big , поэтому wc не должен даже знать, что я набрал это), поэтому теоретически wc должен был делать то же самое в два раза, но, очевидно, этого не делал. Что я не понимаю о перенаправлении?

Редактировать: Я не думаю, что это действительно имеет значение, но я сделал $ cat big | xclip -selection clipboard $ cat big | xclip -selection clipboard чтобы скопировать данные в мой буфер обмена, затем я просто щелкнул правой кнопкой мыши в gnome-terminal и вставил его. На всякий случай, если кто-то захочет попробовать это на своем компьютере.

One Solution collect form web for “Непоследовательное поведение перенаправления ввода”

Реализация wc от GNU coreutils пытается оптимизировать ширину столбцов. Если вы передаете ему только обычные файлы (будь то на стандартном вводе или по имени), он считывает каждую запись каталога для каждого файла, чтобы узнать размер файла, и он знает, что все числа, которые он собирается распечатать, меньше или равны сумме размеров файлов. С обычными файлами wc соответствующим образом регулирует ширину столбца. Если хотя бы один из входных файлов не является обычным файлом, GNU wc использует ширину по умолчанию 7 (что может оказаться слишком маленьким, поэтому вы получаете много лишнего места или слишком большие, чтобы вы получали неравнозначные столбцы) ,

  • Как сделать wc интерпретировать стандарт как список файлов
  • Количество номеров каталогов
  • wc - установка конечного символа
  • Как добавить число слов в файл без добавления общего количества
  • Разделить входной файл на X частей общего количества строк / X
  • Список (или перемещение) только файлов с определенным количеством строк?
  • команда wc подсчитывает дополнительные символы
  • Отправлять случайные данные через TCP на некоторое время и подсчитывать, сколько байтов было отправлено
  • Запустите wc и покажите только количество слов
  • Ускорение команды поиска rm с проверкой путем распараллеливания
  • Количество вкладок в строке в текстовом файле с utils
  • Получить количество пробелов в строке?
  • Linux и Unix - лучшая ОС в мире.