Цитирование ANSI C: Почему столбец -s $’t’, но столбец -s ‘xHH’ без использования $’…’?

#linux #bash #shell

Вопрос:

Когда я использую команду column для переформатирования вывода, я знаю, что мне нужно передать $'...' формат в параметр-s (разделитель), если разделитель представляет собой символ обратной косой черты ANSI C.

Пример:

файл1 и файл2:

 $ head *.txt
==> 1.txt <==
a
aa aaa aaa aaa
aaa

==> 2.txt <==
bbb
bbb
bbb
 

Форматирование по 't' (по умолчанию для вставки используется вкладка):

 $ paste 1.txt 2.txt | column -s 

Пока все хорошо. Должно быть в 't'   формате $'t'  

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99  , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99'  , а  $'x99'  не получить желаемый результат. Это почему?

тест1:

 $ paste -d 'x99' 1.txt 2.txt | column -s 

тест2:

 $ paste -d 

тест3:

 $ paste -d 'x99' 1.txt 2.txt | column -s 'x99' -t
a               bbb
aa aaa aaa aaa  bbb
aaa             bbb
 

тест4

 $ paste -d 

Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37



Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. "Ошибка сегментации" - это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.

   gdb --args column -s 

 column  При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs  , которое вызывает  mbstowcs  проверку переданной строки  -s   NULL  . Это можно было бы исправить с помощью чего-нибудь еще:

     case 's':
        free(ctl.input_separator);
        ctl.input_separator = mbs_to_wcs(optarg);
        // --- snip --- MISSING FIX:
        if (ctl.input_separator == NULL) {
             errx(EXIT_FAILURE, _("blabla some message"));
        }
        // --- snip ---
        ctl.greedy = 0;
 

test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v ...

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII "Начало заголовка" и "Начало/конец текста" всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t' -t
a bbb
aa aaa aaa aaa bbb
aaa bbb
Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. "Ошибка сегментации" - это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v ...

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII "Начало заголовка" и "Начало/конец текста" всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99' -t
Segmentation fault (core dumped)
тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. "Ошибка сегментации" - это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v ...

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII "Начало заголовка" и "Начало/конец текста" всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t' -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. "Ошибка сегментации" - это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v ...

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII "Начало заголовка" и "Начало/конец текста" всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99' 1.txt 2.txt | column -s

тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. "Ошибка сегментации" - это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v ...

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII "Начало заголовка" и "Начало/конец текста" всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t' -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ 1.txt 2.txt | column -s ‘x99’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ 1.txt 2.txt | column -sтест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

231′ -t
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7e4a192 in __wcschr_sse2 () from /usr/lib/libc.so.6
#0 0x00007ffff7e4a192 in __wcschr_sse2 () from /usr/lib/libc.so.6
#1 0x00007ffff7e395b3 in wcspbrk () from /usr/lib/libc.so.6
#2 0x00005555555588f6 in ?? ()
#3 0x00005555555575ba in ?? ()
#4 0x00007ffff7db7b25 in __libc_start_main () from /usr/lib/libc.so.6
#5 0x000055555555826e in ?? () column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ 1.txt 2.txt | column -sтест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ 1.txt 2.txt | column -s ‘x99’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbКто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ 1.txt 2.txt | column -s

тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)

тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbbПока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

x99′ -t
Segmentation fault (core dumped)тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.

t’ -t
a bbb
aa aaa aaa aaa bbb
aaa bbb

Пока все хорошо. Должно быть в 't' формате $'t'

Теперь я решаю использовать другой разделитель на стороне вставки, скажем x99 , невидимый символ.

Я обнаружил, что на стороне столбца я должен пройти 'x99' , а $'x99' не получить желаемый результат. Это почему?

тест1:


тест2:


тест3:


тест4


Кто-нибудь может объяснить результат приведенных выше тестов?Спасибо.

Окружающая среда:

  • Баш : v 5.1.8
  • колонка из util-linux 2.37

Комментарии:

1. #1 0x00007ffff7e395b3 in wcspbrk () Я предполагаю, что вина сега здесь .

2. for i in a b c d e; do echo $i > $i; done; paste -d 'x99' a b c d e | od -c

3. Это больше похоже на проблему с column командой, ничего не связанную с анализом оболочки.

4. «Ошибка сегментации» — это всегда ошибка в программе и никогда не проблема с вашим вызовом

Ответ №1:

Кто-нибудь может объяснить результат приведенных выше тестов?

test1 и test2

Столбец пытается использовать языковой стандарт (т. е. UTF-8) для анализа входных данных, 0x99 сам по себе (без предшествования 0xc2 ) является недопустимой последовательностью Юникода.

Существует ошибка, из-за column которой не проверяется, является ли переданная строка -s допустимой строкой Юникода. column вызовы wcspbrk для поиска input_separator (т. е. $'x99' ) во входном потоке. Поскольку строка 0x99 является недопустимой последовательностью UTF-8, column вызывает wcspbrk в NULL качестве второго аргумента, и это вызывает ошибку seg.


column При анализе входных аргументов отсутствует проверка, она не проверяет , является ли возвращаемое значение mbs_to_wcs , которое вызывает mbstowcs проверку переданной строки -s NULL . Это можно было бы исправить с помощью чего-нибудь еще:


test3

Возможность -d paste и возможность -s column
укажите набор разделителей. paste -d "x99" Вставки просто x , и поскольку -s "x99" x они находятся в наборе разделителей, они просто разделяются по x символу.

test4

Также кажется, что столбцы преобразуют разбитые последовательности, например $'x99' , в x99 форму точно так же, как при чтении с входных данных. Из-за этого при paste вставке 0x99 байта вы можете установить -s x99 , потому column что преобразуете байт на входе в 4 байта x 9 9 и после этого работаете над входом, чтобы разбить его на столбцы.

Затем -s x99 последовательно обнаруживает 4 разделителя x 9 9 , так что вы получаете много пробелов.

В любом случае, решение в любом случае состоит в том, чтобы использовать байты меньше 128.


Я отправил вопрос util-linux на github https://github.com/karelzak/util-linux/issues/1425 и проблема, скорее всего, будет исправлена, и, похоже, в следующей column версии появится сообщение об ошибке, когда команде будет передана недопустимая последовательность UTF-8 -s .

Комментарии:

1.очень хорошо объяснено! Спасибо! Я часто использую x99 в качестве временного заполнителя в sed/awk.., чтобы избежать столкновения с персонажем в содержимом. Похоже, что это не самый мудрый выбор. Вероятно, я могу рассмотреть некоторые символы, подобные f v

2. Я использую 0x01 , или если нет 0x01 , то 0x02 или 0x03 обычно. Символы ASCII «Начало заголовка» и «Начало/конец текста» всегда казались хорошим выбором для разделителя.

Ответ №2:

Проблема была исправлена в вышестоящем репозитории util-linux (https://github.com/karelzak/util-linux/commit/9714331843ef3a6d9c10ff1d3bc5fcf53d44d930) и изменение будет доступно в следующем выпуске.