#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) и изменение будет доступно в следующем выпуске.