Ошибка сегментации с эхом

Si está utilizando Bash y la cantidad de archivos de texto está contenida (, es decir, no excede el límite máximo de número de argumentos, que es muy grande pero no infinito ), puede lograrlo fácilmente con globstarcaracterística:

$ shopt -s globstar
$ cat **/*.txt > merged.txt

Un enfoque más general, aunque menos elegante, será usar findcomo controlador y hacer que llame caten cada archivo, agregando la salida:

$ find -name \*.txt -exec sh -c 'cat {} >> merged.out' \;

Aquí es necesario llamar a shporque desea agregar el resultado de cada cat. Asegúrese de que el archivo de salida tenga una extensión diferente o se encuentre fuera del árbol que está fusionando, o findpuede intentar concatenar la salida consigo mismo.

1
23.04.2019, 01:18
1 ответ

Это просто ошибка в echoping(1), и вы должны сообщить о ней (после проверки, не исправили ли они ее уже в последней версии ).


В файле util.cиз его исходного кода у них есть это маленькое c -x -er:

char           *
to_upper(char *input)
{
        int             c;
        char           *result;
        result = (char *) malloc(strlen(input));
        for (c = 0; c < strlen(input); c++)
                result[c] = toupper((int)input[c]);
        result[strlen(input)] = '\0';
        return result;
}

Обратите внимание, как result[strlen(input)]будет записывать 1 байт сверх длины буфера, выделенного с помощью malloc().

Но это еще не все; вместо того, чтобы объявить правильный прототип to_upper()(, который возвращает 64-битный указатель на x86 -64 ), они позволяют компилятору предположить, что он возвращает 32-битное целое и принудительно приводит его возвращаемое значение. до (char*)вplugins/dns/dns.c:

char           *
init(const int argc, const char **argv)
{
  ...
                upper_type_name = (char *) to_upper(type_name);

Последнее действительно убивает его, и я не думаю, что когда-либо работал на x86 -64; ваша единственная надежда — настроить вашу систему как мультиархивную и установить echopingкак 32-битный двоичный файл; пример (не тестировался )для debian:

apt-get remove echoping
dpkg --add-architecture i386
apt-get update
apt-get install echoping:i386

[Я использовал исходники эха -6.0.2, которые я получил с apt-get source echopingв Debian 9.]

2
27.01.2020, 23:30

Теги

Похожие вопросы