У меня есть простое обходное решение, которое включает 2 сценария строки. Это просто реэкспортирует $JAVA_HOME
переменная к соответствующему пути, и затем вызывает основной сценарий оболочки приложения. Переуказание на Средство запуска Приложения KDE к этому новому сценарию запускает приложение как ожидалось.
Я все еще не уверен, почему я должен сделать это, хотя, так как я могу явно видеть корректное $JAVA_HOME
определение переменной за пределами контекста моего изобретенного сценария. Таким образом, если кто-либо может пролить свет на то, почему это могло бы происходить, я счастливо отмечу это как соответствующий ответ для этого вопроса.
Проблема - это sort
и uniq
используют информацию о сопоставлении для локали. Выключение локали для двух работ команд:
cat sample | awk '{print $2}' | grep -o . | LC_ALL=C sort | LC_ALL=C uniq -c | sort -n
1 ʊ
1 ʌ
1 a
1 æ
1 i
1 v
2 ʃ
2 d
2 t
3 e
3 l
3 ɔ
3 r
4 ɪ
4 n
9 ˈ
9 b
11 ə
при использовании локали «C» вы теряете человеческое сопоставление (например, создание эквивалентов «a» и «A»).
, если вам нужно как сопоставить, так и обработать некоторые символы, не обрабатываемые данными локали glibc; вы можете создать свой собственный языковой стандарт, расширив параметры сортировки по умолчанию.
Вы можете скопировать определение вашего текущего языкового стандарта (например, / usr / share / i18n / locales / en_US) на другое имя. Затем отредактируйте его и в разделе LC_COLLATE:
LC_COLLATE
copy "iso14651_t1"
reorder-after <e>
<U0259> <e>;<PCL>;<MIN>;IGNORE
reorder-after <s>
<U0283> <s>;<PCL>;<MIN>;IGNORE
reorder-end
END LC_COLLATE
скомпилируйте его с помощью: localedef -f ./yourmodifiedfile -t UTF-8 ./someplace
, тогда вы можете использовать LC_ALL =. / someplace
вместо LC_ALL = C
, если вы хотите использовать это регулярно, поместите созданный каталог с другими стандартными языковыми стандартами (обычно / usr / share / locale или / usr / lib / locale) и назовите его стандартным способом (например, если он основан на на en_US вы можете назвать его, например, "en_US @ IPA". Затем вы можете настроить свои локали на постоянное использование LC_COLLATE = en_US @ IPA (обратите внимание, что вы не должны определять LC_ALL, если хотите индивидуально определить некоторые LC_ * переменные)
Обратите внимание, что U + 02C8 является модификатором, поэтому его следует по праву игнорировать при сопоставлении. Но если вам нужно обрабатывать его как отдельный символ, вы можете использовать его вместо то же самое (для просмотра с подборкой), что и U + 02C8, вот как часто набирается):
# defines a handy symbol, to group together similar chars
collating-symbol <'>
# define
reorder-after <z>
<'>
reorder-after <e>
<U0259> <e>;<PCL>;<MIN>;IGNORE
reorder-after <s>
<U0283> <s>;<PCL>;<MIN>;IGNORE
reorder-after <'>
<U0027> <'>;<BAS>;IGNORE;IGNORE
<U02C8> <'>;<PCL>;IGNORE;IGNORE
reorder-end
строки: <значение Unicode> <1-й уровень>; <2-й уровень>; <3-й уровень>; <4-й уровень>
уровни - это то, что используется для их сортировки.
Я думаю (но не пробовал, я позволил это в качестве упражнения :)), что если вы просто определите последний уровень, он будет вести себя как в основном игнорируемый для сортировки, но все же «другой» с точки зрения uniq (до тех пор, пока так как цепочка всех уровней уникальна, я думаю, что персонаж уникален).
Обычно 1-й уровень является символом группировки, как и все буквы типа е. 2-й уровень обычно предназначен для основного символа, есть несколько других символов для различных версий с диакритическими знаками и (своеобразно?) используется для "особого". 3-й уровень обычно используется для различения прописных и строчных букв и тому подобного.
printf '%s\n' ɪ ʃ | uniq -c
должен возвратиться2 ɪ
в любой локали. Это больше походит на ошибку в GNUuniq
мне. Вы хотели бы расшириться? – Stéphane Chazelas 09.08.2013, 18:29sort
не может гарантировать, что идентичный (как в от байта к байту) строки смежны, таким образом,uniq
должен использоватьstrcoll
там. Таким образом, Ваш ответ отлично к точке. И к сожалению, мы должны установить LC_ALL на C для обоихuniq
и вид каждый раз, когда мы должны использоватьuniq
. – Stéphane Chazelas 09.08.2013, 21:16U0234
кому:U07FF
весь вид тот же (glibc 2.17). Это не может быть правильно. – Stéphane Chazelas 09.08.2013, 21:29