Полное сокращение языка перечисляет для 'набора энергии spelllang' опция?

Если я понимаю правильно, Вы хотите обнаружить когда a.out считывает данные со стандартного входа, и когда это действительно отправляет его, что данные и также пишут, что данные к тому же файлу журнала stdout перенаправляются к моделировать локальное echo к терминалу, когда выполнено в интерактивном режиме?

Затем, возможно, решение (синтаксис удара) было бы чем-то как:

mkfifo strace.fifo
{
  while read -d, trace; do
    if [[ $trace = *"read(0" ]]; then
      IFS= read -rn1 answer <&3 || break
      answer=${answer:-$'\n'}
      printf %s "$answer" >&2
      printf %s "$answer"
    fi
  done < strace.fifo 3< answers.txt |
    strace -o strace.fifo -e read ./a.out
} > log 2>&1

Идея состоит в том, чтобы использовать strace (принятие Вы находитесь на Linux), для трассировки read системные вызовы и каждый раз, когда существует a read на дескрипторе файла 0, подайте один символ за один раз от answers.txt.

Править: если программа использует stdio или что-нибудь как этот. То, что, вероятно, произойдет, поскольку вывод перенаправляется в регулярный файл и больше не является терминалом, - то, что все подсказки, которые он производит, буферизуются и будут только сброшены в конце, когда программа выходит.

Работа вокруг должна была бы использовать stdbuf: замена ./a.out с stdbuf -oL ./a.out. Это сказало бы приложение (предполагающий, что это - динамично связанное приложение, и буферизация происходит из-за stdio) сделать буферизацию строки на stdout, как будто это был терминал. Однако то, что это все еще не сделало бы, сбросить stdout после чтений stdio от stdin, как это обычно делало бы, если бы stdin/stdout были терминалами. Так, например, подсказка, не завершенная символом новой строки, не была бы отображена до явного fflush или пока символ новой строки в конечном счете не записан. Настолько лучше всего должен был бы, вероятно, использовать stdbuf -o0 отключить буферизацию в целом.

Если a.out процессы ветвления мая или потоки, добавляют -f опция к strace.

Тот подход не работал бы, если приложение использует select или poll системные вызовы проверки, если существует что-то для чтения на stdin перед фактическим выполнением read. Неблокирование ввода-вывода может также заставить нас отправлять данные слишком быстро.

Как упомянуто в комментариях. expect инструмент должен моделировать взаимодействие с пользователем, он использует псевдотерминал, таким образом, Вы автоматически получили бы входное эхо и не будете иметь буферизированной выходной проблемы. Как альтернатива stdbuf, Вы могли использовать unbuffer сценарий, который идет с ним для обертывания a.out в псевдотерминале. В этом случае можно хотеть добавить немного задержки между обнаружением чтения и отправкой ответа для обеспечения expect воспроизвести подсказки на его stdout.

4
27.03.2015, 07:49
1 ответ

Это примерно так же нежелательно, как и другие ответы, но, возможно, менее неэффективно:

locate --regex --basename "xfce4-keyboard-overlay$" | 
        while IFS= read -r f; do [ -f "$f" ] && printf "%s\n" "$f"; done

(разбит на две строки для читаемости). Выше будут обрабатываться имена, содержащие пробелы. IFS = является необходимым для обработки имен с заключительными пробелами, и, конечно, -r позволяет обрабатывать обратные косые черты.

Подход "давайте поместим в нечто" может быть обречен на провал если присутствуют пути, содержащие новые строки.


Для получения дополнительной информации о IFS см. sh (1) или bash (1) (путем ввода man sh или man bash в систему * nix, и/или чтение его здесь , здесь , здесь , и/или здесь ). Затем прочтите Общие сведения о IFS . и Bash: чтение строки за строкой, с IFS на Stack Exchange (фокус на ответы с более чем 5 голосами), и, если вам все еще не хватило, Проверьте IFS на вики Грега и Результаты поиска IFS на вики Bash Hackers (не на Stack Exchange).

-121--35700-

Сначала я попробовал родительские процессы strace, такие как systemd и Xorg.bin, но я новичок в strace, так что я не могу понять.

Тогда я подумал, что это может быть связано с вопросом разрешения (su -, sudo,... и т.д.). Поэтому я планирую нажать клавишу быстрого вызова как root. Так что я быстро понял, что могу использовать sudo xdotool ключ Super + s для его тестирования. Тогда что меня удивляет, так это работает!

Поэтому я пытаюсь xdotool ключ Super + s без sudo и это все еще работает. Так что я пришел к выводу, что xdotool клавиша Super + s работает нормально, но все же я не могу понять, в чем разница между xdotool и клавишей, нажатой из журнала strace.

Тогда я выхожу из идеи, что если я ставлю xdotool ключ Super + s в качестве пользовательского ярлыка? Так я создал новый пользовательский ярлык Super + J и привязать к команде xdotool ключ Super + s , в котором Super + s уже привязать к команде scrot -s . И это просто работает, когда я нажимаю Super + j

я протестировал gnome-screenshot -a и scrot -s и оба работают как шарм.

[UPDATE] Я нашел эту ссылку , Выпуск 476: Xmonad должен выпустить привязку ключа перед нерестом :

Сообщается JohnTy...@gmail.com, 18 сентября 2011 г.

Используя scrot здесь, чтобы сделать снимки экрана. Скрот захватывает клавиатуру, чтобы прослушать клавиатуру как сигнал к прерыванию. Если клавиатура отсутствует доступно, оно умирает с ошибкой:

giblib error: не удалось захватить клавиатуру: ресурс временно недоступно

Чтобы проверить:

привязать "scrot-s >/tmp/logfile" к клавиатуре в xmonad.hs

Активировать клавиатуру, ничего не происходит.

Проверьте файл журнала, найдите указанную выше ошибку.

Я думаю, что это расовое условие, потому что связывание со "сном 0,2; scrot -s " работает здесь.Реальная проблема в том, что xmonad излишне висит на клавиатуре, и порожденное приложение ожидает его.

Какую версию продукта вы используете? В какой операционной системе? 0,9 .2/slackware linux

Он использует sleep для решения аналогичной проблемы. Я проверил его и он работает. Но я должен поместить его в сценарий оболочки, потому что пользовательская команда, похоже, не поддерживает & & или ; для объединения нескольких команд. Но время сна 0,2 иногда не работает для меня. Безопасный способ, конечно, увеличить до сна 0,5-1 секунду.

-121--244268-

Встроенный сценарий spellfile.vim попытается загрузить отсутствующие файлы периода из http://ftp.vim.org/vim/runtime/spell .

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

Вы, вероятно, хотите

:set spelllang+=cjk

, чтобы не выделять их. Из : help 'spelllang' :

Если имя «cjk» включено, восточноазиатские символы исключаются из проверка периода. Это полезно при редактировании текста, который также имеет азиатский слова.

8
27.01.2020, 20:49

Теги

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