Странный, то, что я не понимаю, - то, почему Ваш второй пример возвращается к оболочке (и я не могу воспроизвести это).
Когда Вы работаете ssh -S none -fNR 13018:localhost:22 example.com | cat
, процесс ssh остается в фоновом режиме. Это все еще имеет конец записи открытого канала. Так cat
еще не видел конец файла на его стандартном входе, и поэтому это продолжает читать.
Нажатие Ctrl+C уничтожает cat
процесс (это - единственная часть задания, которое это все еще выполняет, начиная с процесса ssh в фоновом режиме, переместился к своей собственной группе процесса, и передний план ssh процесс завершается, как только это разветвлено). Если фон ssh процесс пытался записать в свой стандартный вывод (который он не будет, из-за -N
), запись была бы фай с EPIPE (ssh блоки SIGPIPE). cat
процесс также вышел бы при уничтожении фона ssh процесс.
Согласно bash
страница справочника, LC_COLLATE
переменная среды влияет на диапазоны символов, точно согласно ответу Hauke Laging:
LC_COLLATE Эта переменная определяет порядок сопоставления, используемый при сортировке результатов расширения пути, и определяет поведение выражений диапазона, классов эквивалентности и сортирующих последовательностей в рамках расширения пути и сопоставления с образцом.
С другой стороны, LC_CTYPE
классы символов влияния:
LC_CTYPE Эта переменная определяет интерпретацию символов и поведение классов символов в рамках расширения пути и сопоставления с образцом.
То, что это означает, - то, что оба случая потенциально проблематичны, если Вы думаете на английском, слева направо, Латинском алфавите, арабско-разрядном контексте.
Если Вы являетесь действительно надлежащими, и/или пишете сценарий для среды мультилокали, вероятно, лучше удостовериться, что Вы знаете то, что Ваши переменные локали - при соответствии файлам, или быть уверенными, что Вы кодируете абсолютно универсальным способом.
Очень трудно предвидеть некоторые ситуации, хотя, если Вы не изучили лингвистику.
Однако я не знаю об использующей латынь локали, которая изменяет порядок букв, таким образом [a-z] работал бы. Существуют расширения Латинского алфавита, которые сопоставляют лигатуры и diacriticals по-другому. Однако вот немного эксперимента:
<!-- language: lang-bash -->
mkdir /tmp/test
cd /tmp/test
export LC_CTYPE=de_DE.UTF-8
export LC_COLLATE=de_DE.UTF-8
touch Grüßen
ls G* # This says ‘Grüßen’
ls *[a-z]en # This says nothing!
ls *[a-zß]en # This says ‘Grüßen’
ls Gr[a-z]*en # This says nothing!
Это интересно: по крайней мере, для немецкого языка, ни diacriticals как ü, ни лигатуры как ß не свернуты в латинские символы. (или что, или я испортил изменение локали!)
Это может быть плохо для Вас, конечно, при попытке найти имена файлов, которые начинаются с буквы, используют [a-z]*
и примените его к файлу, который запускается с ‘Ä’.
"Другие языки", вот именно. Различные локали могут иметь различные порядки сортировки. Таким образом в теории может случиться так, что a-z не является тем же с другой локалью. Диапазоны становятся трудными это, Вы хотите соответствовать всему. Что является первым, что последний символ?
Люди openSUSE таким образом параноик об этом при проверке имен пользователей / пароли, что они делают это этот путь: [abcdefghi...]
Я никогда не думал о цифрах на других языках / наборы символов. Интересный момент.
По крайней мере, при использовании удара 4.2 на OS X, локали UTF-8, кажется, используют порядок сопоставления ASCII, но локали ISO 8859-1 не делают в некоторых контекстах:
$ LC_ALL=en_US.UTF-8 tr A-C 1-9 <<< B
2
$ LC_ALL=en_US.ISO8859-1 tr A-C 1-9 <<< B
6
$ LC_ALL=en_US.UTF-8 grep [A-Z] <<< ä
$ LC_ALL=en_US.ISO8859-1 grep [A-Z] <<< ä
ä
В некоторых средах локали UTF-8 также используют различные заказы сопоставления.
[: верхний:] и [: ниже:] также включают символы неASCII во многие локали. Если Вы только хотите соответствовать символам ASCII, используйте что-то вроде этого:
LC_ALL=C tr a-zA-Z n-za-mN-ZA-M
Если бы LC_ALL был установлен на что-то еще, LC_COLLATE=C или LANG=C не работали бы.
[a-z]
повороты включать более или менее, чем a-z будут очень необычными - проблема - то, что a-z не является всеми буквенными символами во многих локалях. Таким образом, если Вы ищете слова, [: альфа:] класс символов обеспечивает большое преимущество: это портативно через локали, который [a-z], очевидно, не является. – goldilocks 17.04.2013, 16:56Grüßen
когдаls Gr[a-z]*en
– Bananguin 17.04.2013, 17:38