мигающий код (escape-код) был удален?

Канал не будет работать, потому что, когда несколько процессов читают из одного канала, невозможно предсказать, какие процессы какой байт получают. Однако вы можете использовать сокет. С сокетом серверная сторона получает отдельное соединение каждый раз, когда клиент открывает сокет. Сервер может запрашивать процесс на другом конце сокета , что должно способствовать предсказуемости, поскольку вы можете сделать начальное число ГПСЧ функцией некоторых характеристик процесса.

1
15.03.2016, 02:21
5 ответов

Функция blink зависит от терминала (или эмулятора терминала). Большинство терминалов, которые вы будете использовать, принимают управляющие последовательности, документированные в ECMA-48, например, VT100-совместимые. Управляющая последовательность может

  • вызывать мигание на данном терминале, или
  • отображаться определенным цветом, или
  • просто игнорироваться данным терминалом

Приложения обычно используют описание терминала (terminfo или termcap). Если в описании терминала не сказано, как мигать, то и приложение не будет знать.

Если на вашем компьютере есть infocmp (для terminfo), он покажет возможности, перечисленные в описании терминала. bash ищет только blink - используя имя termcap, поскольку это приложение termcap. В более общем случае terminfo может также описать, как выполнить blink, используя sgr (которого нет в описаниях termcap).

Например, это terminfo описание vt100:

> infocmp vt100
#       Reconstructed via infocmp from file: /usr/local/ncurses/share/terminfo/v/vt100
vt100|vt100-am|dec vt100 (w/advanced video),
        am, mc5i, msgr, xenl, xon,
        cols#80, it#8, lines#24, vt#3,
        acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
        clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr,
        cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
        cuf=\E[%p1%dC, cuf1=\E[C$<2>,
        cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
        cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
        enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J, ka1=\EOq,
        ka3=\EOs, kb2=\EOr, kbs=^H, kc1=\EOp, kc3=\EOn, kcub1=\EOD,
        kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy,
        kf1=\EOP, kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt,
        kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, lf1=pf1, lf2=pf2,
        lf3=pf3, lf4=pf4, mc0=\E[0i, mc4=\E[4i, mc5=\E[5i, rc=\E8,
        rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
        rmkx=\E[?1l\E>, rmso=\E[m$<2>, rmul=\E[m$<2>,
        rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
        sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>,
        sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
        smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,

Соответствующий termcap -

> infocmp -Cr vt100
#       Reconstructed via infocmp from file: /usr/local/ncurses/share/terminfo/v/vt100
vt100|vt100-am|dec vt100 (w/advanced video):\
        :5i:am:bs:ms:xn:xo:\
        :co#80:it#8:li#24:vt#3:\
        :@8=\EOM:DO=\E[%dB:K1=\EOq:K2=\EOr:K3=\EOs:K4=\EOp:K5=\EOn:\
        :LE=\E[%dD:RA=\E[?7l:RI=\E[%dC:SA=\E[?7h:UP=\E[%dA:\
        :ac=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~:\
        :ae=^O:as=^N:bl=^G:cb=\E[1K:cd=\E[J:ce=\E[K:cl=\E[H\E[J:\
        :cm=\E[%i%d;%dH:cr=^M:cs=\E[%i%d;%dr:ct=\E[3g:do=^J:\
        :eA=\E(B\E)0:ho=\E[H:k0=\EOy:k1=\EOP:k2=\EOQ:k3=\EOR:\
        :k4=\EOS:k5=\EOt:k6=\EOu:k7=\EOv:k8=\EOl:k9=\EOw:k;=\EOx:\
        :kb=^H:kd=\EOB:ke=\E[?1l\E>:kl=\EOD:kr=\EOC:ks=\E[?1h\E=:\
        :ku=\EOA:l1=pf1:l2=pf2:l3=pf3:l4=pf4:le=^H:mb=\E[5m:\
        :md=\E[1m:me=\E[0m:mr=\E[7m:nd=\E[C:pf=\E[4i:po=\E[5i:\
        :ps=\E[0i:rc=\E8:rs=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h:\
        :..sa=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<2>:\
        :sc=\E7:se=\E[m:sf=^J:so=\E[7m:sr=\EM:st=\EH:ta=^I:ue=\E[m:\
        :up=\E[A:us=\E[4m:

(Имя termcap для blink - mb, что можно увидеть в описании).

Итак... если вы не видите мигающий текст, это может быть (а) сам терминал или (б) описание терминала.

Дополнительная литература:

7
27.01.2020, 23:11

Мигающий код не работает на терминале VTE, например gnome-terminal , tilda , guake , терминатор , ] xfce4-terminal и так далее.

Вы должны попробовать с xterm .

2
27.01.2020, 23:11

Я долго искал это. Я использую Red Hat Linux. После многих экспериментов замечено, что echo -e "\e[5m Hello world \e[0m"" не будет мигать в графическом режиме, т.е. Ctrl+Alt+F7. Он будет работать только в режиме командной строки от ctrl+alt+F1 до ctrl+alt+F6.

0
27.01.2020, 23:11

Иногда настройки скрыты глубоко в настройках вашего эмулятора терминала.

В ITerm2:

  • Настройки(,)
  • Профили
  • темный (-> мой текущий профиль)
  • Текст
  • Рендеринг текста
  • ☑ Разрешено мигание текста
2
27.01.2020, 23:11

printf '\033[5mHello\033[0m\n' производит:

Мигающий текст в

  • круто -ретро -срок 1.1.1
  • элементарная -клемма 5.3.4
  • гном -терминал 3.32.1
  • консоль5 18.12.3
  • ответная часть -клемма 1.22.1
  • немо -терминал 4.0.0
  • qтерминал 0.14.0
  • rxvt -юникод 9.22
  • ст 0.8.1
  • терминатор 1.91
  • xfce4 -терминал 0.8.7.4
  • xterm 344
  • якуакэ 3.0.5
  • в терминале macOS :, а также iTerm2, если он активирован в разделе «Профиль» > «Текст» > «Визуализация текста».

Выделение цветом фона в

  • Консоль FreeBSD 12
  • Этерм
  • в Windows :minty (используется Cygwin ), PuTTY

Выделение цветом переднего плана в

  • emacs -терминал 5.3.4
  • в Windows :TeraTerm

Обратное видео в

  • mrxvt

Нет эффекта в

  • Консоль Linux
  • Консоль Solaris 11.4
  • гуаке 0.8.8
  • лилитерм 0.9.9.2
  • Термин 1.5.1
  • лктерминал 0.3.2
  • роктерм 3.7.3
  • термит 2.9.6
  • в macOS :iTerm2 (, если явно не активировано)
3
27.01.2020, 23:11

Теги

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