cshell: запуск cat в большом текстовом файле внутри обратных кавычек дает слово «слишком длинное» - PullRequest
1 голос
/ 02 марта 2012

У меня есть файл с довольно длинными строками.Самая длинная строка имеет длину 4609:

% perl -nle 'print length' ~/very_large_file | sort -nu | tail -1
4609

Теперь, когда я просто запускаю cat ~/very_large_file, она работает нормально.Но когда я вставляю внутри обратных кавычек, это выдает ошибку 'word too long'

% foreach line (`cat ~/very_large_file`)
Word too long.

% set x = `cat ~/very_large_file`
Word too long.

Есть ли альтернатива использованию обратных кавычек в csh для обработки каждой строки такого файла?

Обновление Моя проблема была решена с помощью другого языка, но я все еще не мог понять причину сбоя csh.Только что наткнулся на эту страницу, которая описывает способ поиска ARG_MAX.В частности, команда getconf полезна.Конечно, я все еще не уверен, является ли это ограничение основной причиной, и применяется ли ограничение к языкам, отличным от csh.

1 Ответ

1 голос
/ 02 марта 2012

Я не хочу бить старую лошадь, но если вы пишете сценарий, подумайте над тем, чтобы перейти на bash, zsh или даже на Корн.У csh есть недостатки .

Что вы можете попробовать, не отказываясь от csh полностью:

  • Перейдите в tcsh, если вы используете обычный старый (очень старый) csh.
  • Перекомпилируйте tcsh с более длинной длиной слова (я думаю, по умолчанию 1000 байтов) или с динамическим выделением.
  • Если возможно, переместите обработку строки во вторичный скрипт или программу изапишите этот цикл так:

    cat ~ / very_large_file |xargs Secondary_script

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...