├── README
├── arcanoid.sh
├── battery.sh
├── bclock.sh
├── bolt.sh
├── bonfile.sh
├── checkflashback.sh
├── chess.sh
├── eye.bash
├── fixzip.sh
├── ftdnato23andme.sed
├── growl.sh
├── happynewyear.bash
├── helloworld.bash
├── helloworld2.bash
├── lebdec.sh
├── mac_ntfs_write_enabler.sh
├── patch-ilya-birman-typography-layout.bash
├── underwater.sh
├── us_layout_remover.sh
├── wherehaveibeen.sh
├── wifi.sh
└── wifiautofix.sh
/README:
--------------------------------------------------------------------------------
1 | Тут находятся всякие мои заигрывания с Bash и другими shell
2 |
3 | battery.sh - bash analog of batteryCoconut program (Mac only)
4 | block.sh - bash binary clock
5 | bolt.sh — программа, следящая за изменением папки с сайтами на Маке и заводящая сайты в Apache и hosts
6 | bonfile.sh — передача файла между «Маками», используя Бонжур для автообнаружения
7 | checkflashback.sh - check is Mac OS FlashBack virus infected
8 | chess.sh - bash network chess game (controls: ←, →, ↓, ↑ and Space)
9 | eye.bash — глаз следящий за курсором мыши (требует iTerm2 2.9+)
10 | patch-ilya-birman-typography-layout.bash — меняет значки в раскладки Бирмана на флаги стран (только для «Мака»)
11 | fixzip.sh — скрипт для восстановления русских букв после раззипования архивов на «Маке»
12 | ftdnato23andme.sed — конвертор FTDNA → 23andme
13 | growl.sh - работаем с Growl на MacOS через протокол GNTP v1
14 | happynewyear.bash — запутанный скрипт на Баше, выводящий «Happy new year» (bash4)
15 | helloworld.bash — запутанный скрипт на Баше, выводящий «Hello world» (bash4)
16 | helloworld2.bash — ещё один запутанный скрипт на Баше, выводящий «Hello world» (bash4)
17 | lebdec.sh — расшифровывает через декодер Студии Лебедева то, что пришло на stdin
18 | mac_ntfs_write_enabler.sh - enable NTFS write (Mac only, very UNSAFE)
19 | underwater.sh — таймер, который я использую для измерения сколько я могу провести под водой без дыхания
20 | us_layout_remover.sh — удаляет из системы раскладку U.S. English
21 | wifi.sh - bash WiFi signal levels (Mac only)
22 | wifiautofix.sh — автоматическое пересоединение при пропадании вайфая
--------------------------------------------------------------------------------
/arcanoid.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # «Арканоид» на bash. Евгений Степанищев http://bolknote.ru/ 2011
3 | # Bash Arcanoid. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011
4 |
5 | PID=$$
6 |
7 | # Цвета блоков на уровнях
8 | MAPCOLORS=("38;5;"{34,24,204})
9 |
10 | # Карта уровней
11 | declare -a MAPS
12 |
13 | # X Y Тип (цвет) Количество
14 | MAPS=(\
15 | "4 4 0 12 4 5 0 12 4 6 1 12 4 7 1 12 4 8 0 12 4 9 2 12 4 10 2 12"
16 |
17 | "13 2 1 2 8 3 1 1 24 3 1 1 5 4 1 1 27 4 1 1 5 5 1 1 27 5 1 1 8 6 1 1
18 | 24 6 1 1 13 7 1 2 13 4 0 2 16 5 2 1 7 1 1 1 25 1 1 1 70 2 1 1 69 3 1 1
19 | 33 5 1 6 35 6 1 1 35 7 1 1 33 8 1 1 44 6 1 1 44 7 1 1 42 8 1 1 68 4 1 1
20 | 55 6 1 1 62 6 1 1 57 7 1 1 64 7 1 1 54 8 1 1 63 8 1 1 33 4 1 6"
21 |
22 | "28 2 1 4 16 3 1 2 52 3 1 2 10 4 0 1 22 4 0 1 34 4 0 2 52 4 0 1
23 | 64 4 0 1 4 5 2 1 16 5 2 3 46 5 2 3 70 5 2 1 4 6 1 1 22 6 1 1
24 | 34 6 0 2 52 6 1 1 70 6 1 1 10 7 0 4 46 7 0 4 22 8 1 6 4 9 2 1
25 | 70 9 2 1 16 10 1 8"
26 |
27 | "2 1 0 1 2 2 0 1 2 3 0 1 2 4 0 1 2 5 0 1 2 6 0 1 2 7 0 1 2 8 0 1 2 9 0 2
28 | 16 1 1 2 16 2 1 1 16 3 1 1 16 4 1 1 16 5 1 2 16 6 1 1 16 7 1 1 16 8 1 1 16 9 1 2
29 | 30 1 2 1 42 1 2 1 30 2 2 1 42 2 2 1 30 3 2 1 42 3 2 1 30 4 2 1 42 4 2 1
30 | 30 5 2 1 42 5 2 1 30 6 2 1 42 6 2 1 32 7 2 1 40 7 2 1 32 8 2 1 40 8 2 1 36 9 2 1
31 | 50 1 1 2 50 2 1 1 50 3 1 1 50 4 1 1 50 5 1 2 50 6 1 1 50 7 1 1 50 8 1 1 50 9 1 2
32 | 64 1 0 1 64 2 0 1 64 3 0 1 64 4 0 1 64 5 0 1 64 6 0 1 64 7 0 1 64 8 0 1 64 9 0 2"
33 |
34 | "10 2 1 10 10 9 1 10 10 3 1 1 64 3 1 1 10 4 1 1 64 4 1 1 10 5 1 1
35 | 64 5 1 1 10 6 1 1 64 6 1 1 10 7 1 1 64 7 1 1 10 8 1 1 64 8 1 1
36 | 16 4 2 8 16 7 2 8 16 5 2 1 16 6 2 1 58 5 2 1 58 6 2 1 34 5 0 2 34 6 0 2"
37 |
38 | "6 2 0 1 6 3 0 1 6 4 0 1 6 5 0 1 6 6 0 1 6 7 0 1 6 8 0 1 6 9 0 1
39 | 24 2 0 1 24 3 0 1 24 4 0 1 24 5 0 1 24 6 0 1 24 7 0 1 24 8 0 1 24 9 0 1
40 | 15 7 0 1 12 8 0 2 34 2 1 2 34 9 1 2 37 3 1 1 37 4 1 1 37 5 1 1 37 6 1 1
41 | 37 7 1 1 37 8 1 1 50 2 2 1 50 3 2 1 50 4 2 1 50 5 2 1 50 6 2 1 50 7 2 1
42 | 50 8 2 1 50 9 2 1 67 2 2 1 67 3 2 1 67 4 2 1 67 5 2 1 67 6 2 1 67 7 2 1
43 | 67 8 2 1 67 9 2 1 56 4 2 1 57 5 2 1 59 6 2 1 61 7 2 1"
44 | )
45 |
46 | # Счёт
47 | SCORE=0
48 |
49 | # Количество жизней
50 | LIVES=5
51 |
52 | # Количество блоков на уровне
53 | MAPQUANT=
54 |
55 | # Номер уровня
56 | MAPNUMBER=1
57 |
58 | # Прилипает ли мяч к ракетке
59 | STICKY=
60 |
61 | # Создание каретки заданной длины, заполняем глобальные
62 | # переменные
63 | function CreateСarriage {
64 | CW=$1
65 | # Каретка, забитая пробелами и ☰, для ускорения
66 | CSPACES=$(printf "% $(($CW+2))s")
67 | CBLOCKS=$(printf "%0$(($CW-2))s" | sed 's/0/☰/g')
68 | }
69 |
70 | CreateСarriage 5
71 |
72 | # Координаты каретки
73 | CX=2 OCX=
74 |
75 | # Координаты падающего подарка и тип
76 | GX= GY= GT=
77 |
78 | # Координаты мяча
79 | BX=5 BY=2900
80 |
81 | # Угол приращения мяча
82 | BAX=0 BAY=0
83 |
84 | # Версия bash
85 | BASH=(${BASH_VERSION/./ })
86 |
87 | # Координатная сетка виртуального экрана
88 | declare -a XY
89 |
90 | # Заменяем say, если её нет
91 | which say &>/dev/null || function say {
92 | :
93 | }
94 |
95 | # Отрисовка уровня по номеру
96 | function DrawMap {
97 | local i j x y t q map=(${MAPS[$1]}) c
98 |
99 | MAPQUANT=0
100 |
101 | for ((i=0; i<${#map[@]}; i+=4)); do
102 | x=${map[$i]} y=${map[$i+1]}
103 | t=${map[$i+2]} q=${map[$i+3]}
104 |
105 | let "MAPQUANT+=$q"
106 |
107 | c="\033[${MAPCOLORS[$t]}m☲"
108 |
109 | while [ $q -gt 0 ]; do
110 | for j in {0..3}; do
111 | XY[$x+100*$y+$j]=$c
112 | done
113 | let 'x+=6, q--'
114 | done
115 | done
116 | }
117 |
118 | # Обработка клавиатурных событий
119 | function KeyEvent {
120 | case $1 in
121 | LEFT)
122 | if [ $CX -gt 2 ]; then
123 | [ -z "$OCX" ] && OCX=$CX
124 |
125 | let "CX--"
126 | fi
127 | ;;
128 | RIGHT)
129 | if [ $CX -lt $((75-$CW)) ]; then
130 | [ -z "$OCX" ] && OCX=$CX
131 |
132 | let "CX++"
133 | fi
134 | ;;
135 | SPACE)
136 | SpaceEvent
137 | ;;
138 | esac
139 | }
140 |
141 | # Отрисовываем коробку в виртуальный экран
142 | function DrawBox {
143 | local x y b="\033[38;5;8m♻"
144 |
145 | for (( x=0; x<78; x+=2 )); do
146 | XY[$x]=$b XY[$x+3100]=$b
147 | XY[$x+1]=' ' XY[$x+3101]=' '
148 | done
149 |
150 | for (( y=100; y<=3000; y+=100)) do
151 | XY[$y]=$b XY[$y+1]=' '
152 | XY[$y+76]=$b XY[$y+75]=' '
153 | done
154 | }
155 |
156 | function PrintСarriage {
157 | # Если предыдущая и текущая позиция совпадают, то надо только
158 | # нарисовать каретку
159 |
160 | if [ -z "$OCX" ]; then
161 | echo -ne "\033[$(($CX+1))G"
162 | else
163 | # Стираем каретку с того места, где она была,
164 | # дополнительные пробелы по краям стирают глюки
165 | echo -ne "\033[${OCX}G${CSPACES}"
166 | echo -ne "\033[$(($CX+1))G"
167 | fi
168 |
169 | echo -ne "\033[38;5;160m☗\033[38;5;202m$CBLOCKS\033[38;5;160m☗"
170 |
171 | OCX=
172 | }
173 |
174 | # Нажали на space
175 | function SpaceEvent {
176 | # если мяч прилеплен к каретке, стартуем
177 | if [ $BAX -eq 0 ]; then
178 | BAY=-100
179 | [ $CX -gt 38 ] && BAX=1 || BAX=-1
180 |
181 | SoundSpace
182 |
183 | return
184 | fi
185 | }
186 |
187 | # Мячик ушёл в аут
188 | function MissBall {
189 | SoundOut
190 | BAX=0 BAY=0
191 | let BX="$CX+4"
192 | BY=2900
193 |
194 | # Сбрасываем размер ракетки
195 | CreateСarriage 5
196 |
197 | # Очищаем каретку
198 | echo -ne "\033[2G"
199 | printf "% 75s"
200 |
201 | STICKY=
202 |
203 | let 'LIVES--'
204 | PrintLives
205 |
206 | if [ $LIVES -le 0 ]; then
207 | SoundGameover
208 |
209 | echo -ne "\033[18A\033[29G\033[48;5;15;38;5;16m G A M E O V E R "
210 | echo -ne "\033[20B\033[1G\033[0m"
211 | kill -HUP $PID
212 | while true; do
213 | sleep 0.3
214 | done
215 | fi
216 | }
217 |
218 | # Игрок победил
219 | function YouWin {
220 | SoundWin
221 | DrawBox
222 | DrawMap $(($MAPNUMBER-1))
223 | PrintScreen WIN
224 |
225 | echo -ne "\033[18A\033[31G\033[48;5;15;38;5;16m Y O U W I N "
226 | echo -ne "\033[20B\033[1G\033[0m"
227 | kill -HUP $PID
228 | while true; do
229 | sleep 0.3
230 | done
231 | }
232 |
233 | # Рисуем виртуальный экран на экран
234 | function PrintScreen {
235 | local x y xy
236 |
237 | [ -z "$1" ] && SoundWelcome
238 |
239 | for y in {0..31}; do
240 | for x in {0..76}; do
241 | xy=$(($x+$y*100))
242 | echo -ne "${XY[$xy]:- }"
243 | done
244 | echo
245 | done
246 |
247 | if [ -z "$1" ]; then
248 | # Пишем и стираем номер уровня
249 | echo -ne "\033[20A\033[31G\033[48;5;15;38;5;16m L E V E L $MAPNUMBER "
250 | sleep 1.3
251 | echo -ne "\033[31G\033[0m "
252 | fi
253 |
254 | # Курсор в нижний угол (по y=линия каретки)
255 | echo -ne "\033[2A\033[20B"
256 | }
257 |
258 | # Игра окончена
259 | function SoundGameover {
260 | (say -v Zarvox "Loo Loo Loo" &>/dev/null) &
261 | }
262 |
263 | # Нажатие на Space
264 | function SoundSpace {
265 | (say -v Whisper -r 1000 forfor &>/dev/null) &
266 | }
267 |
268 | # Столкновение мяча
269 | function SoundBoom {
270 | (say -v Whisper -r 1000 1 &>/dev/null) &
271 | }
272 |
273 | # Звук прилипания
274 | function SoundStick {
275 | (say -v Junior -r 1200 chpock &>/dev/null) &
276 | }
277 |
278 | # Звук ракетка стала длинее
279 | function SoundWide {
280 | (say -v Whisper -r 400 heh &>/dev/null) &
281 | }
282 |
283 | # Звук шарик в аут
284 | function SoundOut {
285 | (say -v Whisper -r 1000 2 uo &>/dev/null) &
286 | }
287 |
288 | # Звук заставки
289 | function SoundWelcome {
290 | (say -v Zarvox "eueir" &>/dev/null) &
291 | }
292 |
293 | # Звук, когда жизнь увеличивается
294 | function SoundLives {
295 | (say -r 1200 -v Princess yes &>/dev/null ) &
296 | }
297 |
298 | # Победитель
299 | function SoundWin {
300 | (say -v Hysterical 'Das kewl man!' &>/dev/null) &
301 | }
302 |
303 | # Очистка уровня
304 | function ClearLevel {
305 | local i
306 | for i in {1..30}; do
307 | printf "\033[1G% 75s\033[1A"
308 | done
309 |
310 | echo -ne "\033[1G"
311 | }
312 |
313 | # Убрать блок
314 | function RemoveBlock {
315 | local y
316 |
317 | for y in {0..3}; do
318 | unset XY[$1+$2+$y]
319 | done
320 |
321 | y=$((30-$2/100))
322 |
323 | echo -ne "\033[$(($1+1))G\033[${y}A \033[${y}B"
324 |
325 | let 'MAPQUANT--'
326 |
327 | # Разбили все блоки, следующий уровень
328 | if [ $MAPQUANT -le 0 ]; then
329 | let 'MAPNUMBER++'
330 | ClearLevel
331 |
332 | if [ $MAPNUMBER -ge ${#MAPS[@]} ]; then
333 | # Игра окончена, игрок выиграл
334 | YouWin !
335 | else
336 | NextLevel
337 | fi
338 | fi
339 | }
340 |
341 | # Роняем подарок
342 | function StartGift {
343 | local r=$(( $RANDOM % 20 ))
344 |
345 | if [ $r -ge 17 ]; then
346 | GX=$1
347 | GY=$((30-$2/100+1))
348 |
349 | local gifts=(S W L)
350 | GT=${gifts[$r-17]}
351 | fi
352 | }
353 |
354 | # Рисуем мяч, должен рисоваться после всех объектов
355 | function PrintBall {
356 | # Чистим предыдущую позицию
357 | local y=$((30-$BY/100))
358 | echo -ne "\033[$(($BX+1))G\033[${y}A${XY[$BX+$BY]:- }\033[${y}B"
359 |
360 | # Если мяч не двигается, следуем за кареткой
361 | if [ $BAX -eq 0 ]; then
362 | let BX="$CX+$CW/2"
363 | else
364 | local bx=$(($BX+$BAX))
365 | local by=$(($BY+$BAY))
366 |
367 | # Мяч коснулся каретки или дна
368 | if [[ $by -eq 3000 ]]; then
369 | # Каретки
370 | if [[ $bx -ge $CX && $bx -le $(($CX+$CW)) ]]; then
371 | if [ -z "$STICKY" ]; then
372 | SoundBoom
373 | let BAY="-$BAY"
374 | let "BX+=$BAX"
375 | let "BY+=$BAY"
376 | # Ракетка «липкая»
377 | else
378 | SoundStick
379 |
380 | BAX=0 BAY=0
381 | let BX="$CX+4"
382 | BY=2900
383 | fi
384 | # Дна
385 | else
386 | MissBall
387 | return
388 | fi
389 | else
390 | # Проверяем, не наткнулись ли мы на какое-то препятствие
391 | local c=${XY[$bx+$by]:-0}
392 |
393 | if [[ "$c" == "0" ]]; then
394 | # Нет
395 | BX=$bx BY=$by
396 | else
397 | SoundBoom
398 | local h=0 v=0
399 | declare -i h v
400 |
401 | [[ "${XY[$bx+$by+100]:-0}" != "0" ]] && v=1
402 | [[ $by > 100 && "${XY[$bx+$by-100]:-0}" != "0" ]] && v="1$v"
403 | [[ "${XY[$bx+$by+1]:-0}" != "0" ]] && h=1
404 | [[ $bx > 1 && "${XY[$bx+$by-1]:-0}" != "0" ]] && h="1$h"
405 |
406 | if [ $h -ge $v ]; then
407 | let BAY="-$BAY"
408 | fi
409 |
410 | if [ $h -le $v ]; then
411 | let BAX="-$BAX"
412 | fi
413 |
414 | let "BX+=$BAX"
415 | let "BY+=$BAY"
416 |
417 | # Проверка на столкновение с блоком
418 | if [[ $c =~ ☲ ]]; then
419 | # Ищем начало блока
420 | while [[ ${XY[$bx+$by-1]} =~ ☲ ]]; do
421 | let 'bx--'
422 | done
423 |
424 | # Выясняем цвет блока
425 | case ${XY[$bx+$by]} in
426 |
427 | # Этот блок будет преобразован в другой цвет
428 | *${MAPCOLORS[1]}* )
429 | for y in {0..3}; do
430 | XY[$bx+$by+$y]="\033[${MAPCOLORS[2]}m☲"
431 | done
432 |
433 | y=$((30-$by/100))
434 |
435 | echo -ne "\033[$(($bx+1))G\033[${y}A\033[${MAPCOLORS[2]}m☲☲☲☲\033[${y}B"
436 |
437 | PrintScores 2
438 | ;;
439 |
440 | # Этот блок исчезает
441 | *${MAPCOLORS[2]}* )
442 | RemoveBlock $bx $by
443 | PrintScores
444 | ;;
445 |
446 | # Этот блок исчезает, но даёт подарки
447 | *${MAPCOLORS[0]}* )
448 | RemoveBlock $bx $by
449 |
450 | [ -z "$GT" ] && StartGift $BX $by
451 | PrintScores
452 | ;;
453 | esac
454 | fi
455 | fi
456 | fi
457 | fi
458 |
459 | local y=$((30-$BY/100))
460 | echo -ne "\033[$(($BX+1))G\033[${y}A\033[38;5;15m◯\033[${y}B"
461 | }
462 |
463 | # Рисуем падающий подарок
464 | function PrintGift {
465 | echo -en "\033[$(($GX+1))G\033[${GY}A${XY[$GX+(30-$GY)*100]:- }"
466 |
467 | if [ $GY -le 1 ]; then
468 | echo -ne "\033[${GY}B"
469 |
470 | # Поймали подарок
471 | if [[ $GX -ge $CX && $GX -le $(($CX+$CW)) ]]; then
472 | PrintScores 5
473 |
474 | case $GT in
475 | W)
476 | CreateСarriage 7
477 | if [ $CX -gt $((75-$CW)) ]; then
478 | CX=$((75-$CW))
479 | fi
480 |
481 | PrintLives
482 |
483 | SoundWide
484 |
485 | ;;
486 |
487 | S)
488 | STICKY=1
489 | SoundStick
490 | ;;
491 |
492 | L)
493 | SoundLives
494 | let 'LIVES++'
495 | PrintLives
496 | esac
497 | fi
498 | GT=
499 | else
500 | let 'GY--'
501 | echo -ne "\n\033[38;5;34m\033[$(($GX+1))G☲\033[${GY}B"
502 | fi
503 | }
504 |
505 | # Печать жизней
506 | function PrintLives {
507 | echo -ne "\033[31A\033[3G\033[0;1m${LIVES} "
508 | echo -ne "\033[38;5;160m☗\033[38;5;202m$CBLOCKS\033[38;5;160m☗ \033[31B"
509 | }
510 |
511 | # Copyright
512 | function PrintCopy {
513 | echo -ne "\033[2B\033[52G\033[0;1mhttp://bolknote.ru © 2011\033[2A"
514 | }
515 |
516 | # Печать счёта
517 | function PrintScores {
518 | let "SCORE+=${1:-1}"
519 |
520 | PrintCopy
521 |
522 | echo -ne "\033[31A\033[$((69-${#SCORE}))G\033[0mScore: \033[1m$SCORE\033[31B"
523 | }
524 |
525 | # Переход на следующий уровень
526 | function NextLevel {
527 | XY=()
528 | CreateСarriage 5
529 | CX=2 OCX=
530 | GX= GY= GT=
531 | BX=5 BY=2900
532 | BAX=0 BAY=0
533 | STICKY=
534 |
535 | DrawBox
536 | DrawMap $(($MAPNUMBER-1))
537 | PrintScreen
538 | PrintLives
539 | PrintScores 0
540 | }
541 |
542 | # Очистка клавиатурного буфера
543 | function ClearKeyboardBuffer {
544 | # Быстро — через bash 4+
545 | [ ${BASH_VERSINFO:-0} -ge 4 ] && while read -t0.1 -n1 -rs; do :; done && return
546 |
547 | # Быстро — через zsh
548 | which zsh &>/dev/null && zsh -c 'while {} {read -rstk1 || break}' && return
549 |
550 | # Медленно — через bash 3-
551 | local delta
552 | while true; do
553 | delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'`
554 | [[ "$delta" == "0.00" ]] || break
555 | done
556 | }
557 |
558 | function Arcanoid {
559 | exec 2>&-
560 | CHLD=
561 |
562 | trap 'KeyEvent LEFT' USR1
563 | trap 'KeyEvent RIGHT' USR2
564 | trap 'KeyEvent SPACE' HUP
565 | trap "kill $PID" EXIT
566 | trap exit TERM
567 |
568 | echo -e "\033[J\n\n"
569 |
570 | NextLevel
571 |
572 | local i j
573 |
574 | while true; do
575 | [ -n "$GT" ] && PrintGift
576 |
577 | for i in {1..2}; do
578 | PrintСarriage
579 | PrintBall
580 | for j in {1..5}; do
581 | sleep 0.02; PrintСarriage
582 | done
583 | sleep 0.02
584 | done
585 | done
586 | }
587 |
588 | function Restore {
589 | [ -n "$CHILD" ] && pkill -F <(printf "%d" $CHILD) bash
590 | wait
591 |
592 | stty "$ORIG"
593 | echo -e "\033[?25h\033[0m"
594 |
595 | (bind '"\r":accept-line') &>/dev/null
596 | CHILD=
597 |
598 | trap '' EXIT HUP
599 |
600 | ClearKeyboardBuffer
601 |
602 | exit
603 | }
604 |
605 |
606 | # Запрещаем печатать вводимое на экран
607 | ORIG=`stty -g`
608 | stty -echo
609 | (bind -r '\r') &>/dev/null
610 |
611 | trap 'Restore' EXIT HUP
612 | trap '' TERM
613 |
614 | # Убирам курсор
615 | echo -en "\033[?25l\033[0m"
616 |
617 | Arcanoid &
618 | CHILD=$!
619 |
620 | # Клавиатурные комбинации извстной длины
621 | SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7})
622 |
623 | # Проверка совпадения с известной клавиатурной комбинацией
624 | function CheckCons {
625 | local i
626 |
627 | for i in ${SEQLEN[@]}; do
628 | if [[ $1 =~ ^$i ]]; then
629 | return 0
630 | fi
631 | done
632 |
633 | return 1
634 | }
635 |
636 | # Функция реакции на клавиатуру, вызывает React на каждую нажатую клавишу
637 | function PressEvents {
638 | local real code action ch
639 |
640 | # Цикл обработки клавиш, здесь считываются коды клавиш,
641 | # по паузам между нажатиями собираются комбинации и известные
642 | # обрабатываются сразу
643 | while true; do
644 | # измеряем время выполнения команды read и смотрим код нажатой клавиши
645 | # akw NR==1||NR==4 забирает только строку №1 (там время real) и №4 (код клавиши)
646 | eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch") 2>&1 |
647 | awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ')
648 |
649 | # read возвращает пусто для Enter и пробела, присваиваем им код 20,
650 | # а так же возвращаются отрицательные коды для UTF8
651 | if [ "$code" = 0 ]; then
652 | React 20
653 | else
654 | [ $code -lt 0 ] && code=$((256+$code))
655 |
656 | code=$(printf '%02x' $code)
657 | fi
658 |
659 | # Если клавиши идут подряд (задержки по времени нет)
660 | if [[ $real =~ ^0[.,]00$ ]]; then
661 | seq="$seq$code"
662 |
663 | if CheckCons $seq; then
664 | React $seq
665 | seq=
666 | fi
667 |
668 | # Клавиши идут с задержкой (пользователь не может печатать с нулевой задержкой),
669 | # значит последовательность собрана, надо начинать новую
670 | else
671 | [ "$seq" ] && React $seq
672 | seq=$code
673 |
674 | # возможно последовательность состоит из одного символа
675 | if CheckCons $seq; then
676 | React $seq
677 | seq=
678 | fi
679 | fi
680 | done
681 | }
682 |
683 | function React {
684 | case $1 in
685 | 1b5b44)
686 | kill -USR1 $CHILD
687 | ;;
688 | 1b5b43)
689 | kill -USR2 $CHILD
690 | ;;
691 | *)
692 | kill -HUP $CHILD
693 | ;;
694 | esac &>/dev/null
695 | }
696 |
697 | PressEvents
698 |
--------------------------------------------------------------------------------
/battery.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Информация о батарейке на bash. Евгений Степанищев http://bolknote.ru/ 2011
3 | # Bash Battery Info. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011
4 |
5 |
6 | # Хост для информации о серийнике
7 | HOST='www.chipmunk.nl'
8 |
9 | # Выбираем информацию о батарее, получится что-то вроде
10 | # Amperage 18446744073709550574 Flags 4 Capacity 6632 Current 6338 Voltage 8192 CycleCount 14 и тд
11 |
12 | BATTERY=( $(\
13 | ioreg -w0 -l |
14 | egrep '(Max|Design)Capacity|(Legacy|IO)BatteryInfo|product-name|Temperature|PlatformSerialNumber' |
15 | tee >(awk -F{ '/(Legacy|IO)BatteryInfo/ { gsub(/ |\}|"/, ""); gsub(/,|=/, " "); print $2 }') |
16 | tee >(awk -F'"' '/(Max|Design)Capacity|product-name|Temperature|PlatformSerialNumber/ { gsub(/[=<>-]/, ""); print $2 $3 $4}') |
17 | grep -vF '"' |
18 | tr '\n' ' '
19 | ))
20 |
21 | # Достаём значение по ключу из BATTERY
22 | function GetBatVal {
23 | local i
24 |
25 | for ((i=0; i<${#BATTERY[@]}; i+=2)); do
26 | if [ $1 = ${BATTERY[$i]} ]; then
27 | echo ${BATTERY[$i+1]}
28 | break
29 | fi
30 | done
31 | }
32 |
33 | # Получаем информацию о неделе выпуска
34 | function GetPlatform {
35 | local tmpfile="$TMPDIR/battery-age-mac"
36 |
37 | # Файл с кешем, чтобы не дёргать сервис каждый раз
38 | if [ -e $tmpfile ]; then
39 | # проверим время создания файла
40 | eval $(stat -s $tmpfile)
41 |
42 | # Если кеш устарел, то удаляем его
43 | if [ $((`date +%s` - $st_mtime)) -gt 86400 ]; then
44 | rm -f $tmpfile
45 | else
46 | cat $tmpfile
47 | return
48 | fi
49 | fi
50 |
51 | local date=($(\
52 | curl --connect-timeout 3 -H 'User-Agent: M' -XPOST -s \
53 | -d "serienummer2=$1&submit=Submit" "http://$HOST/cgi-fast/applemodel.cgi" |
54 | sed 's/
/`/g' | awk 'BEGIN {RS="`"} /Production (year|week)/{gsub("<[^>]+>", ""); print}' |
55 | sort | sed 's/^[^:]*: *//;s/[^0-9 ]//g' | tr "\r\n" ' '
56 | ))
57 |
58 | if [ ${#date[@]} -le 1 ]; then
59 | echo NA
60 | return
61 | fi
62 |
63 | local scale
64 | local diff
65 |
66 | # Считаем количество недель
67 | let diff="($(date +%Y)-${date[1]})*52177 + ( $(date +%V) - ${date[0]}) * 1000"
68 |
69 | # Выбираем что будем отображать — недели, месяцы, годы
70 | if [ $diff -gt 5 ]; then
71 | diff=$(( $diff / 4340 ))
72 | scale=Month
73 |
74 | if [ $diff -gt 12 ]; then
75 | diff=$(( $diff / 12 ))
76 | scale=Year
77 | fi
78 | else
79 | diff=$(( $diff / 1000 ))
80 | scale=Week
81 | fi
82 |
83 | [ $diff -gt 1 ] && scale=${scale}s
84 |
85 | echo $diff $scale | tee $tmpfile
86 | }
87 |
88 | # Фоновый процесс — выводим возраст модели в определённые координаты
89 | function PrintAgeAt {
90 | echo -en '\033[5A\033[26G\033[K'
91 |
92 | printf "% 17s |" "$1"
93 |
94 | echo -en '\033[5B\033[0G'
95 | }
96 |
97 | # Рисуем прогрессбар
98 | function PrintBat {
99 | # Если терминал поддерживает 256 цветов, покажем красиво
100 | if [[ $TERM =~ 256 ]]; then
101 | local colors=("38;5;160" "38;5;220" "38;5;34")
102 | else
103 | # Иначе, увы, цвета попроще
104 | local colors=(31 33 32)
105 | fi
106 |
107 | local c=${colors[0]}
108 |
109 | [ $1 -ge 13 ] && c=${colors[1]}
110 | [ $1 -ge 20 ] && c=${colors[2]}
111 |
112 | local bar=$(cat)
113 | local prg=$(printf "%0$1s" | tr 0 ${bar:2:1})
114 | local rep="\033[${c}m$prg\033[30m"
115 |
116 | echo -e ${bar/$prg/$rep}
117 | }
118 |
119 | # Всё достаточно очевидно: боксы с информацией
120 | cur=$(GetBatVal Current)
121 | max=$(GetBatVal Capacity)
122 | let percent="($cur*40/$max)"
123 |
124 | echo -e '\033[1m\n Bashnut Battery by Evgeny Stepanischev\033[0m'
125 |
126 | echo
127 | echo ' Battery charge'
128 | echo ┌──────────────────────────────────────────┐
129 | printf '│ Current charge: % 5d mAh │\n' $cur
130 | printf '│ Maximum charge: % 5d mAh │\n' $max
131 | echo '│ │'
132 | echo -e '│ ████████████████████████████████████████ \033[0m│' | PrintBat $percent
133 | echo └──────────────────────────────────────────┘
134 |
135 | des=$(GetBatVal DesignCapacity)
136 | max=$(GetBatVal MaxCapacity)
137 | let percent="($max*40/$des)"
138 |
139 | echo ' Battery capacity'
140 | echo ┌──────────────────────────────────────────┐
141 | printf '│ Current capacity: % 5d mAh │\n' $max
142 | printf '│ Design capacity: % 5d mAh │\n' $des
143 | echo '│ │'
144 | echo -e '│ ████████████████████████████████████████ \033[0m│' | PrintBat $percent
145 | echo └──────────────────────────────────────────┘
146 |
147 | echo ' Details'
148 | echo ┌──────────────────────────────────────────┐
149 | printf '│ Mac model: % 17s │\n' $(GetBatVal productname)
150 | echo -e '│ Age of your Mac: \033[1m…loading…\033[0m │'
151 | printf '│ Battery loadcycles: % 5d │\n' $(GetBatVal CycleCount)
152 | printf '│ Battery temperature: % 5s˚С │\n' `echo "scale=1;($(GetBatVal Temperature)+5)/100" | bc`
153 | echo └──────────────────────────────────────────┘
154 |
155 | echo -e "\033[0m"
156 |
157 | # Возраст Мака
158 | PrintAgeAt "$(GetPlatform `GetBatVal IOPlatformSerialNumber`)" &
159 |
160 | wait
161 |
--------------------------------------------------------------------------------
/bclock.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Бинарные часы на bash. Евгений Степанищев http://bolknote.ru/ 2011
3 | # Bash Binary clock. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011
4 |
5 | declare -a xy
6 |
7 | # Выключаем Enter
8 | bind -r '\r'
9 | # Выключаем остальную клавиатуру
10 | ORIG=`stty -g`
11 | stty -echo
12 |
13 | function Restore {
14 | stty "$ORIG"
15 | bind '"\r":accept-line'
16 | echo -ne "\033[5B\033[?25h\033[m"
17 | }
18 |
19 | trap 'Restore' EXIT
20 |
21 | # Цвета наших «стрелок»
22 | colors=(30 34)
23 |
24 | # Очистка графического массива
25 | function Clear {
26 | xy=
27 | }
28 |
29 | # Подготовка маски одного разряда
30 | function Print {
31 | mask=$(printf '%08d' `echo "obase=2; $1" | bc`)
32 | let pos="$2*4"
33 |
34 | for x in {0..1}; do
35 | for y in {0..3}; do
36 | xy[$pos+$x+$y*100]=${mask:$x*4+$y:1}
37 | done
38 | done
39 | }
40 |
41 | # Печать часов на экран
42 | function PrintClock {
43 | echo -e "\033[?25l\033[1mBash Binary Clock by Evgeny Stepanischev\033[0m\n"
44 |
45 | for y in {0..3}; do
46 | for x in {0..9}; do
47 | c=${colors[${xy[$x+$y*100]:-0}]}
48 | echo -ne "\033[${c}m▣"
49 | done
50 | echo -e "\033[0m"
51 | done
52 |
53 | # после печати часов передвигаем курсов так,
54 | # чтобы следующий кадр выводился поверх предыдущего
55 | echo -en "\033[8A"
56 | }
57 |
58 | # Вывод часов
59 | function Clock {
60 | Clear
61 | for i in {0..2}; do
62 | Print $1 $i
63 | shift
64 | done
65 |
66 | PrintClock
67 |
68 | echo -e "\n"
69 | }
70 |
71 | while true; do
72 | Clock `date "+%H %M %S"`
73 | sleep 1
74 | done
75 |
--------------------------------------------------------------------------------
/bolt.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | # bolt — программа, которая следит за изменением папки с сайтами
3 | # на Маке и добавляет сайты в конфиг Апача и в hosts
4 | # Evgeny Stepanischev http://bolknote.ru Feb 2012
5 |
6 | # Запуск: ./bolt.sh &
7 |
8 | MYSITES=~/Sites/
9 | HOSTS=/etc/hosts
10 | HTTPDCONF=/etc/apache2/other/bolt-httpd.conf
11 |
12 | MD5CURRENT=
13 | MAGIC='# bolt' # mark regexp
14 | MYIP='127.0.0.1'
15 |
16 | HOSTPATT=$(/bin/cat <\n
19 | \tServerAdmin $(/usr/bin/whoami)@%host%\n
20 | \tDocumentRoot "$MYSITES%host%"\n
21 | \tServerName %host%\n
22 | \tServerAlias www.%host%\n
23 | \n
24 | PATTERN
25 | )
26 |
27 | # вызывается, чтобы убрать из /etc/hosts старые хосты
28 | function ClearHosts {
29 | /usr/bin/sed -iE "/${MAGIC}$/d" "$HOSTS"
30 | /usr/bin/sed -iE "/${MAGIC}-www$/d" "$HOSTS"
31 | }
32 |
33 | # скан папки Apache и высеивание того, что на имена доменов не тянет
34 | function NewSites {
35 | local host
36 |
37 | for host in `/bin/ls -1d "$MYSITES"*/ 2>&- | /usr/bin/egrep -o '/([a-z0-9]+\.)*[a-z0-9]+/$'`; do
38 | host="${host//\//}"
39 |
40 | echo "$MYIP $host $MAGIC"
41 | echo "$MYIP www.$host ${MAGIC}-www"
42 | done
43 | }
44 |
45 | # Обновление файла hosts из папки Apache
46 | function RenewHosts {
47 | ClearHosts
48 | NewSites >> "$HOSTS"
49 | }
50 |
51 | # Убиваем старую конфигурацию
52 | function ClearConfig {
53 | /bin/rm -f "$HTTPDCONF"
54 | }
55 |
56 | # Обновление конфигурации
57 | function RenewConfigFromHosts {
58 | local host
59 |
60 | ClearConfig
61 |
62 | echo 'NameVirtualHost *:80' > "$HTTPDCONF"
63 |
64 | for host in `/usr/bin/awk "/$MAGIC$/ {print \\$2}" "$HOSTS"`; do
65 | echo -e ${HOSTPATT//%host%/$host} >> "$HTTPDCONF"
66 | done
67 | }
68 |
69 | # говорим Apache, что конфигурация изменилась
70 | function TouchApache {
71 | /usr/bin/killall -HUP httpd 2>&-
72 | }
73 |
74 | # Обновление всего
75 | # вызывается, если в папке Apache изменились папки
76 | function SmthChanged {
77 | RenewHosts
78 | RenewConfigFromHosts
79 | TouchApache
80 | }
81 |
82 | # Подсчёт контрольной суммы папок в домашней папке Apache
83 | function CheckNew {
84 | /bin/ls -1d "$MYSITES"*/ 2>&- | /sbin/md5
85 | }
86 |
87 | # Убираем всё, что записали на выходе
88 | function Restore {
89 | ClearHosts
90 | ClearConfig
91 | TouchApache
92 | }
93 |
94 | # Подсчёт суммы в цикле и инициация события, если что-то сменилось
95 | function CheckLoop {
96 | local md5
97 |
98 | while :; do
99 | md5=$(CheckNew)
100 |
101 | if [[ $md5 != "$MD5CURRENT" ]]; then
102 | SmthChanged
103 |
104 | MD5CURRENT=$md5
105 | fi
106 |
107 | /bin/sleep 1
108 | done
109 | }
110 |
111 | if [[ `/usr/bin/whoami` == root ]]; then
112 | trap Restore EXIT
113 | CheckLoop
114 | else
115 | /usr/bin/sudo -b bash "$0"
116 | fi
117 |
118 |
--------------------------------------------------------------------------------
/bonfile.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Передача файлов на Баше с использованием Бонжура. Евгений Степанищев http://bolknote.ru/ 2012
4 | # Bash file transfer using Bonjour. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2012
5 |
6 | # пути до утилит
7 | DNSSD=/usr/bin/dns-sd
8 | EXPECT=/usr/bin/expect
9 | PS=/bin/ps
10 | SORT=/usr/bin/sort
11 | NC=/usr/bin/nc
12 | AWK=/usr/bin/awk
13 | KILL=/bin/kill
14 | XARGS=/usr/bin/xargs
15 | GZIP=/usr/bin/gzip
16 | MD5=/sbin/md5
17 | TEE=/usr/bin/tee
18 | IPCONFIG=/usr/sbin/ipconfig
19 | EGREP=/usr/bin/egrep
20 | CUT=/usr/bin/cut
21 | HEAD=/usr/bin/head
22 | IFCONFIG=/sbin/ifconfig
23 | ROUTE=/sbin/route
24 | TR=/usr/bin/tr
25 |
26 | # конфигурация
27 | GZIPLEVEL=3 # уровень сжатия gzip
28 | PORT=1111 # порт, на котором будет передаваться файл
29 | SNAME=_bolk-fileshare._tcp # имя сервиса
30 |
31 | # Получаем наш IP
32 | function _GetMyIP {
33 | local route=`$ROUTE -n get default 2>&-`
34 |
35 | if [ -z "$route" ]; then
36 | # Либо, первый попавшийся, если нет IP по-умолчанию
37 | $IFCONFIG |
38 | $AWK '/^[\t ]*inet/ {print $2}' |
39 | ($EGREP -v '^(127\.|::1)' || echo 127.0.0.1) |
40 | $HEAD -n1
41 |
42 | else
43 | # Либо IP по-умолчанию в системе, если он назначен
44 | echo "$route" |
45 | $EGREP -oi 'interface: [^ ]+' |
46 | $CUT -c12- |
47 | $XARGS $IPCONFIG getifaddr
48 | fi
49 | }
50 |
51 | # клиентская часть
52 | function Client {
53 | # ждём когда в сети появится сервис с нужным нам именем
54 | local info=($($EXPECT <2 {print $7 " " $8}' | $SORT -u | $TR -d '\r' | $HEAD -n1
55 | spawn -noecho $DNSSD -B $SNAME
56 | expect Timestamp
57 | expect -- "$SNAME"
58 | exit
59 | CMDS))
60 |
61 | # в поле информации будет контрольная сумма и хост с которым нужно соединиться
62 | local remotesum=${info[0]}
63 | local host=${info[1]}
64 |
65 | echo -n "Found file server on $host:$PORT. Getting file... " >&2
66 |
67 | # соединяемся с сервером, получаем файл, считая его контрольную сумму
68 | exec 3>&1
69 | local localsum=$($NC $host $PORT | $GZIP -d | $TEE >&3 | $MD5 -q)
70 |
71 | # проверяем — совпадают ли суммы
72 | if [ "$localsum"=="$remotesum" ]; then
73 | echo done. >&2
74 | else
75 | echo 'error (incorrect checksum)' >&2
76 | exit 1
77 | fi
78 | }
79 |
80 | # Убийство dns-sd, которая анонсирует сервис
81 | function _ClearServer {
82 | $PS -f | $AWK "\$2==$1 && /$SNAME/ { print \$2 }" | $XARGS $KILL
83 | }
84 |
85 | # серверая часть
86 | function Server {
87 | # если переданный файл существует
88 | if [ -e "$1" ]; then
89 | local info=$($MD5 -q "$1")" "$(_GetMyIP)
90 |
91 | # анонсируем сервис, передавая контрольную сумму и свой IP
92 | $DNSSD -R "$info" "$SNAME" . $PORT >/dev/null &
93 |
94 | trap "_ClearServer $!" EXIT
95 |
96 | # если соединился клиент, передаём ему файл
97 | $GZIP -nc$GZIPLEVEL "$1" | $NC -l $PORT
98 | else
99 | echo "File '$1' not found!"
100 | exit 1
101 | fi
102 | }
103 |
104 | # main()
105 | if [ -z "$1" ]; then
106 | Client
107 | else
108 | Server "$1"
109 | fi
--------------------------------------------------------------------------------
/checkflashback.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | UUID=$(/usr/sbin/system_profiler SPHardwareDataType | /usr/bin/awk '/UUID/ {print $3}')
4 | result=$(/usr/bin/curl "http://flashbackcheck.com/check/?uuid=$UUID" 2>&-)
5 |
6 | echo -n "Your system status is "
7 |
8 | case "$result" in
9 | "") echo NA.;;
10 | clean) echo -e "\033[1;32mclean.\033[0m";;
11 | *) echo -e "\033[1;31minfected.\033[0m";;
12 | esac
13 |
--------------------------------------------------------------------------------
/chess.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Network chess by Evgeny Stepanischev http://bolknote.ru 2011
3 |
4 | if [ $# -ne 2 ]; then
5 | echo Usage: $0 host-of-opponent port
6 | exit
7 | fi
8 |
9 | # Нам требуется netcat, ищем как он называется на этой системе
10 | NC=
11 | for i in nc netcat ncat pnetcat nc.openbsd; do
12 | which $i &>/dev/null && NC=$i && break
13 | done
14 |
15 | [ -z "$NC" ] && echo 'Error: you have to install netcat to continue' && exit 2
16 |
17 | # Версия bash
18 | BASH=(${BASH_VERSION/./ })
19 |
20 | # Хост оппонента
21 | HOST="$1"
22 |
23 | # Общий порт
24 | PORT="$2"
25 |
26 | # Клавиатурные комбинации извстной длины
27 | SEQLEN=(1b5b4. [2-7]. [cd]... [89ab].{5} f.{7})
28 |
29 | # Фигуры
30 | WHITE=(♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙ ♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖)
31 | BLACK=(♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜ ♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟)
32 |
33 | # Наш ход?
34 | OURMOVE=
35 |
36 | # Я чёрный или белый?
37 | MYCOLOR=
38 |
39 | # Доска
40 | declare -a XY
41 |
42 | # Курсор
43 | CX=1 CY=7
44 | TAKEN=
45 |
46 | # Необходимые нам клавиатурные коды
47 | KUP=1b5b41
48 | KDOWN=1b5b42
49 | KLEFT=1b5b44
50 | KRIGHT=1b5b43
51 | KSPACE=20
52 |
53 | # Восстановление экрана
54 | function Restore {
55 | echo -ne "\033[10B\033[?25h\033[0m"
56 | stty "$ORIG" 2>/dev/null
57 | (bind '"\r":accept-line' 2>/dev/null)
58 | }
59 |
60 | trap Restore EXIT
61 |
62 | # Выключаем Enter
63 | (bind -r '\r' 2>/dev/null)
64 | # Выключаем остальную клавиатуру
65 | ORIG=`stty -g`
66 | stty -echo
67 |
68 | # Убирам курсор
69 | echo -e "\033[?25l"
70 |
71 | # Ошибка в обмене через сеть
72 | function NetworkError {
73 | echo Error: cannot use port $PORT
74 | exit 1
75 | }
76 |
77 | # Отдаём события клавиатуры в сеть
78 | function ToNet {
79 | while true; do
80 | echo $1 | $NC "$HOST" "$PORT" 2>&-
81 |
82 | [ $? = 0 -o -n "$2" ] && break
83 | sleep .2
84 | done
85 | }
86 |
87 | # Реакция на клавиши курсора
88 | function React {
89 | case $1 in
90 | $KLEFT)
91 | if [ $CX -gt 1 ]; then
92 | CX=$(($CX-1))
93 | PrintBoard
94 | fi
95 | ;;
96 |
97 | $KRIGHT)
98 | if [ $CX -lt 8 ]; then
99 | CX=$(($CX+1))
100 | PrintBoard
101 | fi
102 | ;;
103 |
104 | $KUP)
105 | if [ $CY -gt 1 ]; then
106 | CY=$(($CY-1))
107 | PrintBoard
108 | fi
109 | ;;
110 |
111 | $KDOWN)
112 | if [ $CY -lt 8 ]; then
113 | CY=$(($CY+1))
114 | PrintBoard
115 | fi
116 | esac
117 |
118 | # Отдаём события клавиатуры в сеть
119 | [ "$OURMOVE" ] && ToNet $1
120 | }
121 |
122 |
123 | # Проверка совпадения с известной клавиатурной комбинацией
124 | function CheckCons {
125 | local i
126 |
127 | for i in ${SEQLEN[@]}; do
128 | if [[ $1 =~ ^$i ]]; then
129 | return 0
130 | fi
131 | done
132 |
133 | return 1
134 | }
135 |
136 | # Функция реакции на клавиатуру, вызывает React на каждую нажатую клавишу,
137 | # кроме KSPACE — на неё возвращается управление
138 |
139 | function PressEvents {
140 | local real code action ch
141 |
142 | # Цикл обработки клавиш, здесь считываются коды клавиш,
143 | # по паузам между нажатиями собираются комбинации и известные
144 | # обрабатываются сразу
145 | while true; do
146 | # измеряем время выполнения команды read и смотрим код нажатой клавиши
147 | # akw NR==1||NR==4 забирает только строку №1 (там время real) и №4 (код клавиши)
148 | eval $( (time -p read -r -s -n1 ch; printf 'code %d\n' "'$ch ") 2>&1 |
149 | awk 'NR==1||NR==4 {print $1 "=" $2}' | tr '\r\n' ' ')
150 |
151 | [ $code -lt 0 ] && code=$((256+$code))
152 |
153 | code=$(printf '%02x' $code)
154 |
155 | if [ $code = $KSPACE ]; then
156 | [ "$OURMOVE" ] && sleep 0.2 && ToNet $KSPACE
157 |
158 | SpaceEvent && return
159 | continue
160 | fi
161 |
162 | # Если клавиши идут подряд (задержки по времени нет)
163 | if [ $real = 0.00 ]; then
164 | seq="$seq$code"
165 |
166 | if CheckCons $seq; then
167 | React $seq
168 | seq=
169 | fi
170 |
171 | # Клавиши идут с задержкой (пользователь не может печатать с нулевой задержкой),
172 | # значит последовательность собрана, надо начинать новую
173 | else
174 | [ "$seq" ] && React $seq
175 | seq=$code
176 |
177 | # возможно последовательность состоит из одного символа
178 | if CheckCons $seq; then
179 | React $seq
180 | seq=
181 | fi
182 | fi
183 | done
184 | }
185 |
186 | # Проверяем чёрная или белая фигура
187 | function CheckColor {
188 | echo -n ${1:0:1}
189 | }
190 |
191 | # Первичное заполнение доски
192 | function FillBoard {
193 | local x y ch
194 |
195 | for y in {1..8}; do
196 | for x in {1..8}; do
197 | ch='S '
198 |
199 | if [ $y -le 2 ]; then
200 | ch=B${BLACK[$x+8*$y-9]}
201 | else
202 | if [ $y -ge 7 ]; then
203 | ch=W${WHITE[$x+8*$y-57]}
204 | fi
205 | fi
206 |
207 | XY[$x+100*$y]=$ch
208 | done
209 | done
210 | }
211 |
212 | # Вывод букв по краю доски
213 | function PrintBoardLetters {
214 | local letters=abcdefgh
215 |
216 | [ -z "$OURMOVE" ] && echo -ne "\033[30m" || echo -ne "\033[0m"
217 |
218 | echo -n ' '
219 |
220 | for x in {0..7}; do
221 | echo -n "${letters:$x:1} "
222 | done
223 | echo
224 | }
225 |
226 | # Вывод цифры по краю доски
227 | function PrintBoardDigit {
228 | [ -z "$OURMOVE" ] && echo -ne "\033[30m"
229 | echo -en " $((9-$1))\033[0m "
230 | }
231 |
232 | # Вывод доски
233 | function PrintBoard {
234 | local x y c ch
235 | local colors=('48;5;209;37;1' '48;5;94;37;1')
236 |
237 | PrintBoardLetters
238 |
239 | for y in {1..8}; do
240 | PrintBoardDigit $y
241 |
242 | for x in {1..8}; do
243 | c=${colors[($x+$y) & 1]}
244 | ch=${XY[$x+100*$y]}
245 |
246 | if [[ $CX == $x && $CY == $y ]]; then
247 | c="$c;7"
248 | [ "$TAKEN" ] && ch=$TAKEN
249 | [ $MYCOLOR == B ] && c="$c;38;5;16"
250 | fi
251 |
252 | [[ $(CheckColor "$ch") == "B" ]] && c="$c;38;5;16"
253 |
254 | echo -en "\033[${c}m${ch:1:1} \033[m"
255 | done
256 |
257 | PrintBoardDigit $y
258 | echo
259 | done
260 |
261 | PrintBoardLetters
262 |
263 | echo -e "\033[11A"
264 | }
265 |
266 | # Приём событий
267 | function NetListen {
268 | $NC -l -p $PORT 2>&- || $NC -l $PORT 2>&- || NetworkError
269 | }
270 |
271 | # Готовы слушать события сети
272 | function NetEvents {
273 | local code
274 |
275 | while true; do
276 | code=$(NetListen)
277 |
278 | [[ "$code" == "$KSPACE" ]] && SpaceEvent && return
279 |
280 | React $code
281 | done
282 | }
283 |
284 | # Реакция на нажатие Space и Enter — взять или положить фигуру
285 | function SpaceEvent {
286 | local xy
287 |
288 | # Проверяем, есть ли фигура под курсором
289 | let xy="$CX+$CY*100"
290 |
291 | # Фигуры нет
292 | if [ "${XY[$xy]:-S }" = "S " ]; then
293 | if [ -z "$TAKEN" ]; then
294 | echo -en "\007"
295 | else
296 | # Положили фигуру
297 | XY[$xy]=$TAKEN
298 | TAKEN=
299 | return 0
300 | fi
301 | # Фигура есть
302 | else
303 | # Мы не должны позволять «съесть» свою фигуру
304 | if [[ $(CheckColor "$TAKEN") == $(CheckColor "${XY[$xy]}") ]]; then
305 | echo -en "\007"
306 | else
307 | # Фигура есть «в руке», мы «съедаем» противника
308 | if [ "$TAKEN" ]; then
309 | XY[$xy]=$TAKEN
310 | TAKEN=
311 | return 0
312 | else
313 | # «В руке» ничего не было, мы взяли фигуру
314 | TAKEN=${XY[$xy]}
315 | XY[$xy]="S "
316 | fi
317 | fi
318 | fi
319 |
320 | return 1
321 | }
322 |
323 | # Очистка клавиатурного буфера
324 | function ClearKeyboardBuffer {
325 | # Быстро — через bash 4+
326 | [ $BASH -ge 4 ] && while read -t0.1 -n1 -rs; do :; done && return
327 |
328 | # Быстро — через zsh
329 | which zsh &>/dev/null && zsh -c 'while {} {read -rstk1 || break}' && return
330 |
331 | # Медленно — через bash 3-
332 | local delta
333 | while true; do
334 | delta=`(time -p read -rs -n1 -t1) 2>&1 | awk 'NR==1{print $2}'`
335 | [[ "$delta" == "0.00" ]] || break
336 | done
337 | }
338 |
339 | FillBoard
340 |
341 | # Кто будет ходить первым
342 | ToNet HI IGNORE
343 | [[ "$(NetListen)" == "HI" ]] && OURMOVE=1
344 | sleep 0.2
345 | ToNet ULOOSE IGNORE
346 |
347 | [ "$OURMOVE" ] && MYCOLOR=W || MYCOLOR=B
348 |
349 | PrintBoard
350 |
351 | # Основной цикл — обрабатываем события из сети или с клавиатуры
352 | while true; do
353 | if [ -n "$OURMOVE" ]; then
354 | ClearKeyboardBuffer
355 | PressEvents
356 | OURMOVE=
357 | else
358 | NetEvents
359 | OURMOVE=1
360 | fi
361 |
362 | PrintBoard
363 | done
364 |
--------------------------------------------------------------------------------
/eye.bash:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Только для терминала iTerm 2 версии 2.9 и выше!
3 | # Требует Imagemagick для работы
4 | W=32
5 | Z=4 # во сколько раз увеличение
6 |
7 | CONVERT=$(command -v magick || command -v convert)
8 |
9 | # Отключаем вывод на экран
10 | ORIG=$(stty -g)
11 | stty -echo
12 | # Убираем курсор
13 | printf "\033[?25l\033[2J"
14 |
15 | # На выходе восстанавливаем параметры экраны
16 | function Restore {
17 | stty "$ORIG" 2>&-
18 | printf "\033[?1003l\033[?25h"
19 | exit
20 | }
21 |
22 | trap 'Restore' EXIT
23 |
24 | # Слушаем мышь
25 | function Listener {
26 | # Будем слушать перемещения, координаты в десятичном виде
27 | printf "\033[?1006h\e[?1003h"
28 | local n code=
29 | local -a arr
30 |
31 | # Собираем координаты, считывая их побайтно
32 | while read -n 1 n; do
33 | case "$n" in
34 | [0-9] | ";")
35 | code="$code$n"
36 | ;;
37 | *)
38 | if [ -n "$code" ]; then
39 | IFS=";" read -ra arr <<<"$code"
40 | if [ ${#arr[@]} -gt 1 ]; then
41 | Eye "${arr[1]}" "${arr[2]}"
42 | fi
43 | code=
44 | fi
45 | ;;
46 | esac
47 | done
48 | }
49 |
50 | # Выводим картинку на экран
51 | function Img {
52 | local w=$(($W * $Z))
53 | printf "\033]1337;File=width=${w}px;height=${w}px;inline=1:%s\a\n" $(base64)
54 | }
55 |
56 | # Рисуем глаз по зрачком
57 | function DrawEye {
58 | local x="$1" y="$2" w="$3"
59 |
60 | # На белом фоне — круг с обводкой, потом вырезаем из этого круг
61 | $CONVERT -size ${W}x${W} xc: -strokewidth 2 -stroke LightBlue \
62 | -fill Blue -draw "circle $x,$y $(($x+4)),$(($y+4))" \
63 | -strokewidth 0 \
64 | \( +clone -negate -fill white -draw "circle $(($w-1)),$((w-1)) 0,$w" \) \
65 | -alpha off -compose copy_opacity -strip -composite png:-
66 | }
67 |
68 | # Выводим глаз по координатам на которые надо смотреть
69 | function Eye {
70 | printf "\033[0;0H"
71 | local mx="$1" my="$2" w=$(($W/2))
72 |
73 | # Считаем гипотенузу, потом sin/cos угла, а из них выводим координаты зрачка
74 | xy=($(/usr/bin/awk "BEGIN {c=sqrt($mx^2+$my^2); sn=$my/c; cs=$mx/c; print int(3+$w*cs), int(3+$w*sn)}"))
75 | DrawEye ${xy[0]} ${xy[1]} $w | Img
76 | }
77 |
78 | Eye 1 1
79 | Listener
80 |
--------------------------------------------------------------------------------
/fixzip.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Переименование ущербных имён файлов после распаковки zip-архивов
3 | # запуск: fixzip.sh "папка, где надо поправить имена"
4 |
5 | function rename() {
6 | tr '†°Ґ£§•с¶І®©™Ђђ≠а-р' 'а-еёж-нр-яЁ' <<< "$1" | sed $'s/Г\xcc\x81/о/g;s/у\xcc\x81/п/g;s/ш\xcc\x86/щ/g'
7 | }
8 |
9 | function renamefile() {
10 | local new="$(rename "$2")"
11 |
12 | if [[ "$2" != "$new" ]]; then
13 | mv "$1/$2" "$1/$new"
14 | echo "$new"
15 | fi
16 | }
17 |
18 | function scan() {
19 | ls -1 "$1" | while read file; do
20 | if [ -d "$1/$file" ]; then
21 | scan "$1/$file"
22 | fi
23 | renamefile "$1" "$file"
24 | done
25 | }
26 |
27 | SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)
28 |
29 | scan "${1-${SCRIPT_DIR}}"
30 |
--------------------------------------------------------------------------------
/ftdnato23andme.sed:
--------------------------------------------------------------------------------
1 | #!/usr/bin/sed -n -f
2 |
3 | # Convert FTDNA format to 23andme
4 | # usage: ./ftdnato23andme.sed < ftdna.csv > 23andme.txt
5 |
6 | 1a\
7 | # rsid chromosome position genotype
8 |
9 | y/-,/m /; s/"//g
10 |
11 | 2,$p
--------------------------------------------------------------------------------
/growl.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # Работа с Growl на bash. Евгений Степанищев http://bolknote.ru/ 2012
4 | # Growl communication in Bash. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2012
5 |
6 | APPLICATION="My Shell Script"
7 | NOTIFYNAME="Shell Message"
8 | MESSAGE="Hi all!"
9 |
10 | # Получаем наш IP
11 | function _GetMyIP {
12 | local route=`/sbin/route -n get default 2>&-`
13 |
14 | if [ -z "$route" ]; then
15 | # Либо, первый попавшийся, если нет IP по-умолчанию
16 | /sbin/ifconfig |
17 | /usr/bin/awk '/^[\t ]*inet/ {print $2}' |
18 | (/usr/bin/egrep -v '^(127\.|::1)' || echo 127.0.0.1) |
19 | /usr/bin/head -n1
20 |
21 | else
22 | # Либо IP по-умолчанию в системе, если он назначен
23 | echo "$route" |
24 | /usr/bin/egrep -oi 'interface: [^ ]+' |
25 | /usr/bin/cut -c12- |
26 | /usr/bin/xargs /usr/sbin/ipconfig getifaddr
27 | fi
28 | }
29 |
30 | # Отсылка сообщение в growl через telnet при помощи expect
31 | # Возвращает «-OK» в случае успеха
32 | function _GrowlSend {
33 | local ip="$1"
34 | local port="$2"
35 |
36 | (
37 | echo "spawn -noecho /usr/bin/telnet -N8EL $ip $port"
38 | echo set timeout 1
39 | echo expect_after timeout exit
40 | echo 'expect "Escape" {'
41 |
42 | while read -re; do
43 | echo "send -- \"$REPLY\\n\""
44 | done
45 |
46 | echo 'send "\n"'
47 | echo expect '"Response-Action"'
48 | echo '}'
49 | ) |
50 | /usr/bin/expect |
51 | /usr/bin/awk '/^GNTP\/1.0 -(OK|ERROR)/{print $2}'
52 | }
53 |
54 | # Посылаем нотификацию
55 | # параметры:
56 | # IP на котором «слушает» Growl (если пустой, используется локальный)
57 | # порт на котором «слушает» Growl (если пустой, используется 23053)
58 | # текст сообщения
59 | # пример:
60 | # GlowSendNotify "" "" 'Привет всем!'
61 | function GrowlSendNotify {
62 | local ip="$1"
63 | [ -z "$ip" ] && ip=$(_GetMyIP)
64 |
65 | local -i port="$2"
66 | [ $port -gt 0 ] || port=23053
67 |
68 | local text="$3"
69 |
70 | res=`_GrowlSend "$ip" $port <>${#?})):${#?}}${__:${#_____}:${#?}}
7 | ___=$___${____:$((${#___}-${#?}-${#?})):${#?}};___=${___,,}
8 | ____=${____:$((${#___}+${#__}-${#?})):$((${#?}+${#?}))}
9 | ____=${____::${#?}}${__:${#_____}:${#?}}${____:${#?}};${____,,}<<<${___^}
10 |
--------------------------------------------------------------------------------
/helloworld.bash:
--------------------------------------------------------------------------------
1 | __=${_##*/} ___=${#__}
2 | __=($__ $(${__:$(($___-${#___}))}${__:${#___}:$___}) $__)
3 | ____=${__::$((${#__}-${#___}))}${__[$___]::${#___}}${#__[@]}${#__}
4 | _____=$($____<<<${__[@]}) ______=${_____:${#__[${#__}]}:${#___}}
5 | ______=${______,}${__[${#_}]:${#___}:${#___}}${__[$(($___-${#___}))]:${#_}:${#___}}
6 | _______=$($____<<<$_____)
7 | ____=${__[${#______}]:${#______}:${#___}} ____=$____$____
8 | __=${__[${#_}]:${#______}}${__[$___]:${#_}:${#___}}$____${_____:$((${#__[@]}+${#__[$___]})):${#___}}
9 | __=$__' '${_______::${#___}}${__:$___}${_____:$((${#_____}>>${#___})):${#___}}
10 | __=$__${____:${#___}}${_______:$(($___+${#______})):${#___}} __=${__,,}
11 | $______<<<${__^}
--------------------------------------------------------------------------------
/helloworld2.bash:
--------------------------------------------------------------------------------
1 | _...._.(){ __=<(:) __=${__#/*/};${__:${#?}:${#?}}${__%?/*};}
2 | _._..__(){ ___=$((${#?}+${#-})) __=($(_...._.)) ____=${__[${#?}]}
3 | ___=${___//*-/} ____=${____:(-$___):${#?}} _____=${__[$___],,}
4 | ____=$____${_____::${#?}}${__:(-$___):${#?}};$____<<<$____;}
5 | ._.(){ __=/${-:${#?}} ___=($(_...._.))
6 | __=$__${___:${#?}:${#?}}?/?${___:(-${#?})}
7 | __=$(${___:${#-}:${#?}}${___:$((${#-}+${#-})):${#?}} ${__,,});
8 | $(_._..__)<<<${__:(-${#-}):${#?}};}
9 | .__() { __=$(_._..__) ___=$(_...._.)
10 | ____=${___:$(((${#-}<<${#?})+${#?})):${#?}}
11 | __="${__:(-${#?})}$(._.) ${__:${#?}:${#?}}-$____" ___=<(:)
12 | __="$__ ${___:${#?}:${#?}}-$____" ___=$(_._..__)
13 | $__<<<${___:(-${#?})};};__=($(_...._.)) ___=$((${#?}+${#-}))
14 | ____=${-::${#?}}${__:$___:${#?}}${__:${#-}:${#?}}${__:${#-}:${#?}}
15 | ___=${__[${#?}]#*-} ____="$____${___:${#-}:${#?}} $(.__)${___:${#-}:${#?}}"
16 | __=<(:) ____=$____$(._.)${___:${#?}:${#?}}${__:${#?}:${#?}}!
17 | $(_._..__)<<<${____^}
18 |
--------------------------------------------------------------------------------
/lebdec.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | while read query; do
3 | curl -d "text=$(echo -n "$query" | od -t x1 -A n | tr -d "\n" | sed -E 's/ +/%/g;s/%$//g')&Decode=go" \
4 | "http://www.artlebedev.ru/tools/decoder/" 2>&- |
5 | fgrep -v '&-
6 | done
--------------------------------------------------------------------------------
/mac_ntfs_write_enabler.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Enable built-in Mac OS NTFS driver for writing
3 | # Very UNSAFE!!!
4 |
5 | ARCH=`uname -r | cut -d. -f1`
6 | NMOUNT=/sbin/mount_ntfs
7 | NLIBRA=/System/Library/Extensions/ntfs.kext/Contents/MacOS/ntfs
8 |
9 | function usage {
10 | cat <
14 | - "enable" for enable NTFS write, "disable" otherwise.
15 | USAGE
16 | exit
17 | }
18 |
19 | function ntfsdisable {
20 | if [ -e "${NMOUNT}_orig" ] && [[ -e "${NLIBRA}_orig" || $ARCH -eq 10 ]]; then
21 | sudo /bin/mv "${NMOUNT}_orig" "$NMOUNT"
22 | [ $ARCH -eq 11 ] && sudo mv "${NLIBRA}_orig" "$NLIBRA"
23 |
24 | echo Disabled
25 | else
26 | echo "Error: cannot disable NTFS. Already disabled?"
27 | fi
28 | }
29 |
30 | function ntfsenable {
31 | ntfsenable$ARCH
32 | echo Enabled
33 | }
34 |
35 | function ntfsenable10 {
36 | echo -n 'Please enter your administrator password. '
37 |
38 | sudo /bin/mv "$NMOUNT" "${NMOUNT}_orig"
39 | /bin/cat << MNT | sudo /usr/bin/tee "$NMOUNT" >/dev/null
40 | #!/bin/sh
41 | /sbin/mount_ntfs_orig -o rw "\$@"
42 | MNT
43 | sudo /usr/sbin/chown root:wheel "$NMOUNT"
44 | sudo /bin/chmod 755 "$NMOUNT"
45 | }
46 |
47 | function ntfsenable11 {
48 | TEMP=`mktemp -d /tmp/ntfs$$.XXXXXX` || (
49 | echo 'Cannot create temporary directory.'
50 | exit
51 | )
52 |
53 | trap "/bin/rm -rf $TEMP" EXIT
54 |
55 | echo -n 'Please wait. Downloading...'
56 |
57 | curl -o "$TEMP/arch.zip" 'http://dl.dropbox.com/u/9349175/datahost-macdaily/NTFS_Enabler.zip' 2>&- 1>&- ||
58 | curl -o "$TEMP/arch.zip" 'http://ntfs_enabler.chat.ru/NTFS_Enabler.zip' 2>&- 1>&- || (
59 | echo 'Cannot download NTFS enabler bundle.'
60 | exit
61 | )
62 |
63 | echo ' done'
64 |
65 | unzip "$TEMP/arch.zip" -d "$TEMP" 2>&- 1>&-
66 | [ `md5 "$TEMP/NTFS_Enabler/ntfs"` == a88031b3257379257086af017891f229 ] || (
67 | echo "Error: invalid checksum NTFS enabler bundle"
68 | exit
69 | )
70 |
71 | ntfsenable10
72 |
73 | sudo /bin/mv "$NLIBRA" "${NLIBRA}_orig"
74 | sudo /bin/mv "$TEMP/NTFS_Enabler/ntfs" "$NLIBRA"
75 | sudo /usr/sbin/chown root:wheel "$NLIBRA"
76 | sudo /bin/chmod 755 "$NLIBRA"
77 | }
78 |
79 | if [[ $ARCH -lt 10 || $ARCH -gt 11 ]]; then
80 | echo 'Unknown Mac OS version (Snow Leopard or Lion required).'
81 | exit
82 | fi
83 |
84 | [ "$1" == "" ] && usage
85 |
86 | case "$1" in
87 | enable)
88 | ntfsenable
89 | ;;
90 | disable)
91 | ntfsdisable
92 | ;;
93 | esac
94 |
--------------------------------------------------------------------------------
/patch-ilya-birman-typography-layout.bash:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # https://bolknote.ru (bash script)
3 | # https://eugenelazarev.medium.com (icons)
4 |
5 | function writeFlag()
6 | {
7 | local mark="$1"
8 | local file="$2"
9 |
10 | /usr/bin/awk "/^#$mark/{print \$2}" "$0" | /usr/bin/base64 -d | /usr/bin/bunzip2 > $file
11 | }
12 |
13 | MOUNT='/Volumes/Ilya Birman Typography Layout'
14 | TMPDIR=$(/usr/bin/mktemp -d)
15 | TMP="$TMPDIR/installer.app"
16 | trap "/bin/rm -rf $TMPDIR" EXIT
17 |
18 | echo Mounting dmg file
19 | /usr/bin/hdiutil attach -quiet ~/Downloads/ilya-birman-typolayout-*-mac.dmg -mountpoint "$MOUNT"
20 | echo Copying the installer
21 | /bin/cp -r "$MOUNT/"*.app "$TMP"
22 | /usr/bin/xattr -cr "$TMP"
23 |
24 | APP=$(echo "$TMP/Contents/Resources/Layout/"*.bundle'/Contents/Resources')
25 |
26 | echo Patching English language flag
27 | writeFlag EN "$APP/English - Ilya Birman Typography.icns"
28 | echo Patching Russian language flag
29 | writeFlag RU "$APP/Russian - Ilya Birman Typography.icns"
30 |
31 | echo Running patched installer
32 |
33 | /usr/bin/open -W "$TMP"
34 |
35 | echo Removing patched installer
36 |
37 | exit
38 |
39 | #EN QlpoOTFBWSZTWXZb0wEANRX/////////////////////////////////////////////4JEfAAAAaFKHVGdm3vfe3zvr7b533b57fKm+7u9bvczXbbtrdvu+fZt997b7ve857au+b3vvtybnenu69bq9271ufPfebfW7a90zfervr2K93Hu7d7eet7u3tu++9GXn3e7r17e3cXzffdZ7e65t3c+Bd9wPt7X3tpVdPO3Te+2N7xvLuk533e23vkX3n167fTpa7veTvb3fefd3w5V719Xd2492vbZ1t33On1432PO9z1e7pvr33nVvu9vTrTW9uPe3fT1x77N17um990fJ3vfOfeO9y1q3fWdb2+3trtu49vObu6pZc13b7uvvLPaXecPe925jc+xe7vdPr577vfHqyvc+7ve9e726r2z3udq57vr19Xe889jX3vLvc7333n1m+5ut2Du1XdyzuWsd7Pdvffd8883XbZrJqtt8Z29z3m9W7p32d92cKvth733HqT2y2S771d73ZzbWtuvr7xp773ee1533u9333z7fNbco3vTqMW7VVu5726114u68d5Ny973z77vmdV9s691arzp7udZ7V6evXpu7ve72e3uuc9u21r0q72e9j2r17K9z17ruOPu595p8vda97vvoe+7bgVU0AEwAU8IwABMACYJgAAACZNMAmAmE0YjTAjAAAIxMATCYAmAJpgAaNAADQGQABQqqeINAmAAAjAmBMAATTJgmATJiYBMBMAAEyYAABNMTAGgANGmjQAA0BMmTCaaaZMAqbyaaaYmqFVMQAJgAExMJgEwFPBGmCYE0xU/TEwE0xM1NMNGmgaGhoaDTRqbRkJgmTEyZNMmTAmEwmmBDCYCNNDAEYEaUKqZAAAAATBM1MAmmTCbI0BoxGUzRpo0aAaTAAmU9MTTTJkxJ4EaY1GRhMJgEwmmJkwptGmmBGACZMmmTENMlBVCGRpoAwmU2jQNAaGg0GgCMATRhTaZGJgmT0ATBMABGmp4jJgJiMJT8mTE00aYTRpk0wI0yDBME00xoCmMmTVBppJAmQEyBkyDTTJqZo0JkxkNDRoCYDQE9AGgTEzJoEwBkJgBoAmExqYTaamBGJjRMACPQTEwTAjCaniap+KkbybU+Odk2ssZwoCFy9JiR2co3onAkZJuiIiZyCHy681WFFHGmb0cw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
40 | #RU QlpoOTFBWSZTWQvRUCsADqx/////////////////////////////////////////////4B1+fFCglFN7W82Wb6fPPPfNrwvvt23t1e92H33vfO3vfdZHrdV1kr6ePdvvvc5596983c+972+hfDvcd5e866+3vvbrbNilbjvevOnw+931PfPeb19tvoAiiJpo1MDSZqMammlP002pkMaTAJo0xMTEaaRtMGkYpmKZim1PEwTRlPQ0yYaIniYmJo1PBMTJpk0MAaMgAak3ok80mTABMTaCoRIiaaGgnplMaCaY1NMp6p+mEwJpo9RkMjDSNpTzSnpknpPJPKbInhMjU9MmmAYiYmJmianieiME2jUbTU1PSmxtSepiaPQxMFNphSb1PJgjVPKe1QiSEZMjVPSn4qe2hoRqeANAjTZAmCaYExPKepjTQ00GjSZGCZpoaNIYU9MFJ5PAJlTbFMNJ6nkynqYwSnk1PNMp+lNqmxMaYp6p+UxJ+p6maaMmqEUUyGmp6NT0EwamGRo01PQmGg1PTRlM0001MjTFNkmMU8RpghgCZD0TCMJNNPUzRPIaeoyBiMmmJkJ6ek0aTNGGonqeE2o00noRvUn6mjU9NQagggJmo1NMU9MRjUxqaaCZqep6YKek9T1P0kxMPQk2ieEnqHpM0mekZT0amyJhPRpPU2k9JskeiNMj1PRpoTTE8k9MibRkCaYNJp6GQ0ahhqZPSeSCSSQQTAmmARiE8mInpqepgTanqbQE9U9PUY0mTRkyGjaRinplNmkMCNGEekwmmmIxM1Tek0wmDTRDFPKeUbSbU9NqBtJpPRp6U8pptJ4Kemp6TELyprg061sHwXgOQAEHorAbjKBeLBUl6enMZc2+s6KBz/egY5lbJA6FMZMxUCnTkkFXXVpIq0kzZFPfJpFisqc7VxwZ2JaFn5RHQCryOhNXFwoI9RPAhDw9QuEDpiUH7NNDASozMkiyMkIzc78r0vNmTHgtQyD3mJ5kJCzTI85kTcs6XgNHPBBY/83M3Mw8SEfEPCh2SDvJdwknzCfMKRfORZexC1nYfpyJhsCkPUOWlU3KSd+ORQ518dfAJhAjqYJHIYYo+tODOhbQ/dEJgSkfF0aCwgQwwCfxInnhWQZWdkF4GVBc3G+8i9APCh2PfY71oJPDkQBiJI4vg8KmYFIsIvDeawhZQGYZKNYr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
41 |
--------------------------------------------------------------------------------
/underwater.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | VOICE=Alex
3 |
4 | function SayMinute {
5 | local s=
6 |
7 | [ "$1" -gt 1 ] && s=s
8 | say -v "$VOICE" "$1" minute$s &
9 | }
10 |
11 | function SayMiddle {
12 | say -v "$VOICE" half &
13 | }
14 |
15 | function PrintTimer {
16 | printf "\r⏰ \033[7m %02d:%02d \033[0m" $1 $2
17 | }
18 |
19 | function VolumeUp {
20 | which -s osascript || return
21 |
22 | eval "local _$(osascript -e 'get volume settings' | tr ',: ' ' =_' )"
23 | [[ "$_output_muted" == true ]] && osascript -e 'set volume output muted false'
24 | [ $_output_volume -lt 50 ] && osascript -e 'set volume output volume 50'
25 | }
26 |
27 | trap 'echo -e "\033[?25h\033[0m"' EXIT
28 |
29 | echo -e "\033[?25l"
30 | start=$(date +%s)
31 | echo -e 'Press ^C key to exit and any other key to memory current value.\n'
32 | PrintTimer 0 0
33 |
34 | VolumeUp
35 |
36 | while true; do
37 | timeout=( $( (time -p read -n1 -t1 -rs) 2>&1) )
38 |
39 | [[ ${timeout[1]} != 1* ]] && printf "\n\n"
40 |
41 | now=$(date +%s)
42 | per=$(( $now - $start))
43 | sec=$(( $per % 60 ))
44 | min=$(( $per / 60))
45 |
46 | [ $sec = 30 ] && SayMiddle
47 |
48 | PrintTimer $min $sec
49 |
50 | [[ $min > 0 && $sec == 0 ]] && SayMinute $min
51 | done
--------------------------------------------------------------------------------
/us_layout_remover.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # Evgeny Stepanischev Aug 2012 http://bolknote.ru
3 | # http://artpolikarpov.ru/2012/08/24/1/
4 |
5 | PLIST=~/Library/Preferences/ByHost/com.apple.HIToolbox.*.plist
6 | BACKUP=$(echo $PLIST).backup
7 |
8 | function GetSection {
9 | /usr/libexec/PlistBuddy -c "Print :$1" $PLIST
10 | }
11 |
12 | function WhereUS {
13 | local num=0
14 |
15 | GetSection "$1" |
16 | while read -r -d} line; do
17 | if echo "$line" | grep -Fq U.S.; then
18 | echo $num
19 | break
20 | fi
21 |
22 | let 'num++'
23 | done
24 | }
25 |
26 | function DeleteFromSection {
27 | [ -n "$2" ] || return
28 |
29 | /usr/libexec/PlistBuddy -c "Delete :$1:$2 dict" $PLIST
30 | }
31 |
32 | # Смотрим, не было ли бакапа
33 | if [ -e $BACKUP ]; then
34 | mv -f $BACKUP $PLIST
35 | echo Restored.
36 | else
37 | # если не было, сохраняем исходный файл
38 | if cp $PLIST $BACKUP; then
39 | # удаляем упоминание о раскладке US изо всех секций
40 | /usr/libexec/PlistBuddy -c Print $PLIST | awk '/Array {/ {print $1}' |
41 | while read field; do
42 | DeleteFromSection $field `WhereUS $field`
43 | done
44 |
45 | echo Removed.
46 | else
47 | echo Error: cannot backup file. Exiting.
48 | exit 1
49 | fi
50 | fi
51 |
52 | echo Try to logout.
53 | osascript -e 'tell application "System Events" to log out'
--------------------------------------------------------------------------------
/wherehaveibeen.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | function coordsToAddress
3 | {
4 | local x="$1" y="$2" lang=en
5 |
6 | [[ "$LANG" == ru* ]] && lang=ru
7 |
8 | curl -s "http://data.esosedi.org/geocode/v1?lng=$lang&point=$x,$y" |
9 | awk -F: '/"name"/ {print $2}' | xargs echo | sed 's/,$//;s/, *,/,/g'
10 | }
11 |
12 | function macToCoords
13 | {
14 | local mac="$1"
15 | local where=$(curl -s "https://api.mylnikov.org/wifi/main.py/get?bssid=$mac" 2>&-)
16 |
17 | if [[ "$where" == *'"result":200'* ]]; then
18 | echo $(grep -Eo '"(lat|lon)": *[^ ",]*'<<<"$where" | xargs echo)
19 | fi
20 | }
21 |
22 | function macToAddress
23 | {
24 | local mac="$1"
25 | local coords=$(macToCoords "$1")
26 |
27 | if [[ "$coords" != "" ]]; then
28 | if [[ "$coords" == 'lon'* ]]; then
29 | local xy=$(awk '{print $4" "$2}' <<< "$coords")
30 | else
31 | local xy=$(awk '{print $2" "$4}' <<< "$coords")
32 | fi
33 |
34 | local address=$(coordsToAddress $xy)
35 | if [[ "$address" == "" ]]; then
36 | address='N/A'
37 | fi
38 | else
39 | address='N/A'
40 | coords='N/A'
41 | fi
42 |
43 | echo -e "BSSID: $mac\nAddress: $address\nGeo: $coords"
44 | }
45 |
46 | MASK='(BSSID changed|UserEventAgent.*Probing)'
47 |
48 | fgrep -B1 'Probing' < <(zgrep -Eh "$MASK" /var/log/system.log.*.gz ; grep -Eh "$MASK" /var/log/system.log) |
49 | while read line; do
50 | case "$line" in
51 | *BSSID*)
52 | mac=$(grep -o '[^ ]*$' <<<"$line")
53 | ;;
54 | *Probing*)
55 | name=$(sed "s/^.*Probing *'//;s/'$//" <<<"$line")
56 | echo "$mac $name"
57 | mac=
58 | ;;
59 | esac
60 | done | sort -u |
61 | while read line; do
62 | line=($line)
63 |
64 | echo "Name: ${line[@]:1}"
65 | macToAddress "${line[0]}"
66 | echo
67 | done
--------------------------------------------------------------------------------
/wifi.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | # График занятости каналов WiFi на bash. Евгений Степанищев http://bolknote.ru/ 2011
3 | # Bash simple WiFi channels scanner. Copyright by Evgeny Stepanischev http://bolknote.ru/ 2011
4 |
5 | declare -a dots
6 |
7 | TEMP=$(mktemp -t `basename "$0"`)
8 | trap "/bin/rm -f $TEMP" EXIT
9 |
10 | if [ -z $1 ]; then
11 | /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s > $TEMP
12 | else
13 | /bin/cp "$1" $TEMP
14 | fi
15 |
16 | # Если название точки содержит пробел, у нас всё поедет, надо избавиться от названия
17 | # для этого мы меряем с каким отступом идёт первая строка
18 | cutname=`awk 'NR==1 {l=length; gsub(/^ +/, ""); print l-length+6}' $TEMP`
19 |
20 | # Название будет отрезано командой cut
21 | while read line; do
22 | line=($line)
23 |
24 | chs=(${line[2]//,/ })
25 |
26 | # Берём только каналы 2,4ГГц
27 | if [ ${chs[0]} -gt 13 ]; then
28 | continue
29 | fi
30 |
31 | # Округляем уровень сигнала
32 | let lvl="(100 + ${line[1]} + 9) / 10"
33 | # Уровень прозрачности верхней линии
34 | let alpha="$lvl*10 - (100 + ${line[1]})"
35 |
36 | # Номера каналов
37 | let start="${chs[0]}-2+1"
38 | let end="${chs[0]}+2+${chs[1]:-0}*5+1"
39 |
40 | # Набор точек для рисования прямоугольника wifi-точки
41 | for x in $(seq $start $end); do
42 |
43 | # Прямоугольник закрашивается сплошным…
44 | for y in $(seq 0 $(($lvl - 1)) ); do
45 | dots[$x+$y*100]=10
46 | done
47 |
48 | # Кроме верхней границы, она закрашивается значением
49 | # наибольшей насыщенности
50 | let xy="$x+($y+1)*100"
51 |
52 | if [[ -z ${dots[$xy]} || ${dots[$xy]} -lt $alpha ]]; then
53 | dots[$xy]=$alpha
54 | fi
55 | done
56 |
57 | done < <(tail -n +2 $TEMP | cut -b${cutname}- | sort -rgk2)
58 |
59 | # Блоки по насыщенности границы
60 | blocks=(_ ░ ░ ░ ▒ ▒ ▒ ▒ ▒ ▒ █)
61 |
62 | # Цвета вертикальной оси
63 | colors=(32 32 32 32 32 33 33 31 31 31 31)
64 |
65 | # Счётчик вертикальной оси
66 | lvl=0
67 |
68 | declare -i alpha
69 |
70 | # Отрисовка шкалы и данных точек
71 | for y in {10..0}; do
72 | printf "\033[${colors[-$lvl/10]}m% 4d " $lvl
73 | let lvl="$lvl - 10"
74 |
75 | for x in {0..15}; do
76 | alpha=${dots[$x+100*$y]}
77 |
78 | if [ $alpha -le 0 ]; then
79 | echo -n ' '
80 | else
81 | b=${blocks[$alpha]}
82 |
83 | echo -ne "\033[37m$b$b$b"
84 | fi
85 | done
86 |
87 | echo
88 | done
89 |
90 | # Горизонтальная ось
91 | echo -e "\033[37m -- -- 01 02 03 04 05 06 07 08 09 10 11 12 13"
92 |
93 | echo -e "\033[0m"
94 |
95 |
--------------------------------------------------------------------------------
/wifiautofix.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | wifi=$(networksetup -listallhardwareports | fgrep Wi-Fi -A1 | awk 'NF==2{print $2}')
4 |
5 | while true; do
6 | if networksetup -getairportpower $wifi | fgrep -q On; then
7 | ip=$(netstat -rn | awk "/^default.*$wifi\$/{print \$2;exit}")
8 |
9 | ping -b $wifi -t2 -n $ip >&- 2>&- ||
10 | (
11 | networksetup -setairportpower $wifi off
12 | echo "$(date +%d.%m.%Y\ %R:%S) Reconnecting…"
13 |
14 | until networksetup -getairportpower $wifi | fgrep -q On; do
15 | networksetup -setairportpower $wifi on
16 | sleep 1
17 | done
18 | sleep 10
19 | )
20 | fi
21 | sleep 1
22 | done
23 |
--------------------------------------------------------------------------------