Канал не будет работать, потому что, когда несколько процессов читают из одного канала, невозможно предсказать, какие процессы какой байт получают. Однако вы можете использовать сокет. С сокетом серверная сторона получает отдельное соединение каждый раз, когда клиент открывает сокет. Сервер может запрашивать процесс на другом конце сокета , что должно способствовать предсказуемости, поскольку вы можете сделать начальное число ГПСЧ функцией некоторых характеристик процесса.
Функция 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
, что можно увидеть в описании).
Итак... если вы не видите мигающий текст, это может быть (а) сам терминал или (б) описание терминала.
Дополнительная литература:
Мигающий код не работает на терминале VTE, например gnome-terminal
, tilda
, guake
, терминатор
, ] xfce4-terminal
и так далее.
Вы должны попробовать с xterm
.
Я долго искал это. Я использую Red Hat Linux. После многих экспериментов замечено, что echo -e "\e[5m Hello world \e[0m"" не будет мигать в графическом режиме, т.е. Ctrl+Alt+F7. Он будет работать только в режиме командной строки от ctrl+alt+F1 до ctrl+alt+F6.
Иногда настройки скрыты глубоко в настройках вашего эмулятора терминала.
В ITerm2:
printf '\033[5mHello\033[0m\n'
производит:
Мигающий текст в
Выделение цветом фона в
Выделение цветом переднего плана в
Обратное видео в
Нет эффекта в