Этот вопрос ранее задали на форуме Суперпользователя.
Заключение в кавычки из ответа @grawity по тому вопросу:
При вызове программы через xargs stdin программы (стандартный вход) указывает на/dev/null. (Так как xargs не знает исходный stdin, он делает следующую лучшую вещь.)
Vim ожидает, что его stdin совпадет с его терминалом управления и выполняет различный связанный с терминалом ioctl's на stdin непосредственно. При выполнении на/dev/null (или любой non-tty дескриптор файла), те ioctls бессмысленны и возвращают ENOTTY, который тихо проигнорирован.
Это упоминается в страницах руководства для xarg. От OSX/BSD:
- o Вновь открыли stdin как/dev/tty в дочернем процессе прежде, чем выполнить команду. Это полезно, если Вы хотите, чтобы xargs запустил интерактивное приложение.
Следовательно, на OSX, Вы могли использовать следующую команду:
find . -name "php.ini" | xargs -o vim
В то время как, нет никакого прямого переключателя на версии GNU, эта команда будет работать. (Удостоверьтесь, что включали dummy
строка, иначе это отбросит первый файл.)
find . -name "php.ini" | xargs bash -c '
Вышеупомянутыми решениями является любезность Jaime McGuigan на SuperUser. Добавление их здесь для любых будущих посетителей, ищущих сайт эту ошибку.
Необходимо считать себя удачливыми тот AIX sed
добавленный тот недостающие символы новой строки.
Непустой файл, который не заканчивается в символе новой строки, не является текстовым файлом (по крайней мере, согласно определению POSIX текстового файла), поскольку текстовый файл предназначен для содержания строк, и строки являются (не слишком долго) последовательностью символов, завершенных символом новой строки, таким образом, поведение текстовых утилит как sed
на нем является неуказанным и на практике варьируется от реализации до реализации.
Некоторые sed
реализация уволила бы их побочный символ после последней строки.
AFAIK, xml
файлы предназначены, чтобы быть текстовыми файлами, так, чтобы средства sed
просто зафиксированный это для Вас.
Если Вам нужен тот файл для не окончания в символе новой строки, то Вы могли использовать perl
или другие инструменты, которые могут справиться с нетекстовыми данными.
perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'
Вот способ удалить заключительную новую строку из использования файла dd
:
printf "" | dd of='/path/to/file' seek=<filesize_in_bytes - 1> bs=1 count=1
Чтобы протестировать, заканчивается ли файл новой строкой, которую Вы могли бы использовать:
tail -c 1 /path/to/file | tr -dc '\n' | wc -c
И получить размер файла в использовании байтов:
wc -c < /path/to/file