Меньше получает ввод с клавиатуры от stderr?

Необходимо изучить то, что было сделано в классических компонентах JS - берут вещи как Dojo, Расширение, FCKEditor, TinyMCE, и т.д. Вы найдете много хороших идей.

Обычно это заканчивает тем, что было некоторыми атрибутами, которые Вы устанавливаете на тегах, и затем Вы заменяете содержание тега с переводом, найденным в Вашем файле перевода, на основе значения атрибута.

Одна вещь иметь в виду, эволюция набора языка (когда Ваш код развивается, будете, необходимо снова перевести все это или не). Мы сохраняем переводы в Файлах ПО (Гну Gettext), и у нас есть сценарий, который преобразовывает Файл ПО в готовый для использования Файлов JS.

, Кроме того:

  • Всегда использование UTF-8 - это звучит глупым, но если Вы не будете в utf-8 от запуска (голова HTML + JS, кодирующий), Вы будете промахом быстро.
  • Использование английская строка как ключ к Вашим переводам - этот путь Вы не закончите с вещами как: Ленг. Приветствие = 'Привет мир' - но Ленг ['Привет мир'] = 'Привет мир';
13
задан user207421 8 August 2011 в 01:35
поделиться

4 ответа

$ ls -l /dev/fd/
lrwx------ 1 me me 64 2009-09-17 16:52 0 -> /dev/pts/4
lrwx------ 1 me me 64 2009-09-17 16:52 1 -> /dev/pts/4
lrwx------ 1 me me 64 2009-09-17 16:52 2 -> /dev/pts/4

При входе в систему с интерактивного терминала все три стандартных файловых дескриптора указывают на одно и то же: на ваш TTY (или псевдо-TTY).

$ ls -fl /dev/std{in,out,err}
lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stdin -> fd/0
lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stdout -> fd/1
lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stderr -> fd/2

По соглашению мы читаем из 0 и напишите на 1 и 2 . Однако ничто не мешает нам поступить иначе.

Когда ваша оболочка запускает ls -l * | less , он создает конвейер от дескриптора файла ls 1 к less файлового дескриптора 0 . Очевидно, что less больше не может читать ввод с клавиатуры пользователя из дескриптора файла 0 - он пытается вернуть TTY, но может.

If less не был отсоединен от терминала, open ("/ dev / tty") предоставит ему TTY.

Однако, в случае неудачи ... что вы можете сделать? less делает последнюю попытку получить TTY, предполагая, что дескриптор файла 2 присоединен к тому же самому объекту, к которому был бы присоединен дескриптор файла 0 , если он не были перенаправлены.

Этот не является отказоустойчивым:

$ ls -l * | setsid less 2>/dev/null

Здесь less получает свой собственный сеанс (поэтому он больше не является частью активной группы процессов терминала , вызывая сбой open ("/ dev / tty") ), и его файловый дескриптор 2 был изменен - ​​теперь less завершается немедленно, потому что это выводится на TTY, но не получает никаких данных от пользователя.

20
ответ дан 1 December 2019 в 22:07
поделиться

Похоже, это специфическая функция Linux, которая отправляет ввод с клавиатуры в FD 2.

-2
ответ дан 1 December 2019 в 22:07
поделиться

Тот же вопрос с ответом, в конечном счете, от человека, который его задавал, находится в linuxquestions , хотя они цитируют немного другой источник из less . И нет, я не понимаю большей части этого, поэтому я ничего не могу поделать, кроме этого :)

2
ответ дан 1 December 2019 в 22:07
поделиться

Ну ... во-первых, вам кажется, что вам не хватает вызова open () , который открывает '/ dev / tty'. Он использует файловый дескриптор 2 только в случае сбоя вызова open (). В стандартной системе Linux и, вероятно, во многих Unix-системах существует '/ dev / tty' и вряд ли вызовет сбой.

Во-вторых, комментарий вверху дает ограниченное количество объяснений того, почему они возвращаются к файлу. дескриптор 2. Я предполагаю, что stdin , stdout и stderr в значительной степени связаны с '/ dev / tty /' в любом случае, если не перенаправлены. И поскольку наиболее распространены перенаправления для stdin и / или stdout (через конвейер или < / > ), но реже для stderr ,

3
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

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