Архив рубрики «shell»

firefox: оптимизация внутренних баз данных sqlite

26.08.2009
  1. $ find .mozilla/firefox -type f -name "*.sqlite" -exec time sqlite3 \{\} "VACUUM" ";"

via

freebsd+screen+mc: read (subshell_pty…): Unknown error: 0 (0)

07.07.2009

Столкнулся с проблемой. Во FreeBSD под screen после отстрела mc новые экземпляры mc отказываются запускаться, выводя загадочное сообщение об ошибке:

read (subshell_pty...): Unknown error: 0 (0)

Похоже, проблема в том, что после отстрела mc остались процессы в состоянии STOP.

Воспроизвести глюк не удалось, поэтому привожу решение, которое помогло мне:
$ killall -CONT bash2
(посылаем CONT своему шеллу)

Ссылки по теме:

bash: горячие клавиши

17.06.2009

Полный мануал как обычно:

  1. man bash

, ключевые слова в квадратных скобках:

Перемещение:
слово-назад – Alt-B [backward-word (M-b)]
слово-вперед - Alt-W [forward-word (M-f)]
начало-строки - Ctrl-A [beginning-of-line (C-a)]
конец-строки - Ctrl-E [end-of-line (C-e)]

Удаление:
удалить-строку-вперед - Ctrl-K [kill-line (C-k)] - от курсора до конца строки
удалить-строку-назад - Ctrl-U [unix-line-discard (C-u)] - от курсора до начала строки
удалить-слово-вперед - Alt-D [kill-word (M-d)] - от курсора до конца слова
удалить-слово-назад - Alt-Backspace [backward-kill-word (M-Rubout)] - от курсора до начала слова

(Обновляется. Последнее изменение: 17 июня 2009 г.)

цветное приглашение bash prompt

15.10.2008

В unix-консоли, а в частности в приглашении bash можно использовать ANSI-последовательности для задания цветового вывода:

  1.  
  2. PS1='[\\e[01;32m]\\[email protected]\\h[\e[00m]:[\\e[01;34m]\\w[\\e[00m]$ '; export PS1

Цвет задается последовательностью вида \e[ATTR;FG;BGm, где ATTR - необязательный аттрибут, FG - цвет переднего плана, BG - цвет фона.

Сброс цвета к значению по умолчанию - \e[0m

Краткую таблицу соответствия кодов конкретным цветам опубликовал в статье "Prompt Magic" Дэниел Роббинс:

colortable.gif

С помощью ATTR можно делать текст полужирным, подчеркнутым, мигающим, и т.п.:

0 по-умолчанию
1 жирный
22 не жирный
4 подчеркнутый
24 не подчеркнутый
5 мигающий
25 не мигающий
7 инвертированный
27 не инвертированный

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

  1. #!/bin/sh
  2. ############################################################
  3. # Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de
  4. # Last change: Mon Feb 16 16:24:41 CET 2004
  5. ############################################################
  6.  
  7. for attr in 0 1 4 5 7 ; do
  8. echo "----------------------------------------------------------------"
  9. printf "ESC[%s;Foreground;Background - \\n" $attr
  10. for fore in 30 31 32 33 34 35 36 37; do
  11. for back in 40 41 42 43 44 45 46 47; do
  12. printf '\\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back
  13. done
  14. printf '\\n'
  15. done
  16. printf '\\033[0m'
  17. done
  18.  

Ссылки по теме:

vim tabs

01.10.2008

Открыть сразу несколько файлов в tab'ах в vim можно так:

~$ vim -p `find -type f -name '*.rb' -print0 | xargs -0 file -i | grep -v 'utf-8' | awk '{print $1}' | sed 's/://'`

(пример от Харитона, открываем в vim все ruby-файлы в кодировке, отличной от utf-8)
Здесь важен ключ -p: открыть файлы в табах.

Vim откроет столько буферов, сколько нашлось файлов, но не более tabpagemax, по умолчанию 10. Изменить количество табов можно в ~/.vimrc так:

set tabpagemax=15

При превышении tabpagemax новые табы не создаются, но навигировать по файлам все равно можно командами :next и :last.

Переключаться между табами можно командами: :tabnext, :tabprevious, :tablast, :tabfirst. Можно замапить из на горячие клавиши. Можно пользоваться горячими клавишами <C-PgUp> and <C-PgDown>.

Ещё полезное:
:tabn[ew] - открыть новый таб
:tabe[dit] [++opt] [+cmd] {file} - открыть файл в новом табе (типа :edit)
:tabf[ind] [++opt] [+cmd] {file} - найти файл в path и открыть в новом табе (типа :find)
CTRL-W gf - редактировать файл с именем, находящимся под курсором, в новом табе
CTRL-W gF - редактировать файл с именем, находящимся под курсором, в новом табе. Отмотать на строку которая указана после имени файла
:tabc[lose][!] - закрыть таб
:tabo[nly][!] - закрыть все табы кроме активного
:tabn[ext] (gt, <C-PageDown>) - переключиться на следующий таб
:tabp[revious] (:tabN[ext], gT) - на предыдущий таб
:tabr[ewind] (:tabfir[st]) - на первый таб
:tabl[ast] - на последний
:tabs - список табов
:tabm[ove] [N] - переместить текущий таб на место сразу за N-ым
:tabd[o] {cmd} - выполнить команду на каждом из табов (:tabdo %s/foo/bar/g)

Подробнее здесь - :help tabpage

Еще интересная фишка. Если переместить курсор на имя файла и нажать gf (go-to-file), то откроется альтернативный буфер с содержимым указанного файла. Старый файл как-бы пропадет из поля зрения. Однако на него можно быстро переключиться командой C-^, так же и обратно. Так удобно редактировать 2 файла одновременно.

По поводу полезных маппингов:
http://www.bygonesky.com/Programming/Settings/Vim/carlos.vim.html, смотреть начиная со 125-й строки.

grep+awk: запросто вынимаем значение параметра из конфига

18.09.2008

Задача: передать в sh-скрипт значение параметра PidFile из конфига apache.

Решение:

  1. CONF="/usr/local/apache/conf/httpd.conf"
  2. PIDFILE=`grep -i ^[[:space:]]*pidfile $CONF | tail -n 1 | awk '{ print $2 }'`

Где:

  1. grep -i ^[[:space:]]*pidfile $CONF

- выбираем из конфига все строки, начинающиеся сPidFile

  1. tail -n 1

- берем последнюю из них

  1. awk '{ print $2 }'

- выбираем из нее второе поле (значение)