Установка bash'а
Думаю, что данную оболочку для консоли под FreeBSD рекламировать и описывать не стоит. И все же.. Если кто не в курсе, постараюсь объяснить, почему bash является на мой взгляд лучшей оболочкой для консоли.
BASH (Bourne-again Shell) является самой популярной на сегодня программной оболочкой для общения с компьютером. Если не брать ко вниманию консоль FreeBSD, а только Linux - то многие, возможно, удивляться, узнав, что кроме bash существуют и другие оболочки, например, sh, csh. А все потому что bash на Линуксах установлен как оболочка по-умолчанию.. Почему так? Почему популярность bash так велика?
Во-первых - использование сокращенных ссылок на команды в системе (так званные псевдонимы) сокращают время работы при наборе громоздких команд. Например, для очистки файла, я использую команду cat:
cat /dev/null > my_file
Так вот, что бы не утруждать себя каждый раз набором подобной команды, я добавил в файл .bashrc следующие строки:
alias clr='cat /dev/null >'
Эта строка дает понять bash'у, что если я укажу команду clr my_file, нужно выполнить очистку файла, именно так, как я указывал выше. Вывод - можно добавить альясы на часто используемые команды и будет больше времени на чай а не на набор команд ;). Кстати, эти все псевдонимы можно вынести в один отдельный файл - .bash_aliases.
Во-вторых - кто сказал, что признаком языка программирования является условный оператор? :) Да-да.. bash, на удивление тех, кто с ним знакомится, так же поддерживает циклы типа if else then. И это то то при том, что он не является языком программирования. Пользу такого дополнения сложно недооценить. Допустим, вам необходимо перепроверять, запущен ли сервер mysql. Стандартно это выглядит так:
ps aux | grep mysql
А что если я вам скажу, что такую же проверку, да еще и с отчетом на экран можно выводить всего лишь командой ssql? Нет ничего проще:
alias ssql='if ps aux | grep mysqld > /dev/null; then echo "mysql working"; fi'
В данном случае создается псевдоним ssql, который указывает на команду, которая использует условный оператор. И если окажется, что все-таки mysql запущен - получим на экран соответствующее сообщение об этом.
В-третьих - циклы, подобные тому же Perl'у. И много-много еще чего, список может быть велик. И если сильно уж заинтересовал - никто не мешает поискать информацию в Интернете.
Итак, займемся основной задачей, дабы получить сеё чудо на борт своего шатла, то-есть установкой :)
Лезим в порты, обновленные, свежие..
cd /usr/ports
Ищем bash:
make search name=bash | more
В недалеком будущем находим что-то похожее на:
Port: bash-4.1.7_2
Path: /usr/ports/shells/bash
Info: The GNU Project's Bourne Again SHell
Maint: obrien@FreeBSD.org
B-deps: bison-2.4.3,1 gettext-0.18.1.1 libiconv-1.13.1_1 m4-1.4.15,1
R-deps: gettext-0.18.1.1 libiconv-1.13.1_1
Идем по посланому нас адресу:
cd /usr/ports/shells/bash
Полазив по Makefile, можно увидеть море опций при установке. Вы, конечно, можете использовать все по-умолчанию, но у меня другие планы :). Буду ставить bash на статических условиях (при установке bash не требует других библиотек при установке):
make -DWITH_STATIC_BASH -DNO_DYNAMICROOT install clean
После установки в директории /usr/local/bin имеем бинарник bash. Хотя иногда целесообразно запхать его не в эту директорию, а в /bin. Для этого при установке необходимо задать параметр CONFIGURE_ARGS+="--bindir=/bin".
.htaccess или маленькие хитрости CodeIgniter
Первое, что меня заинтересовало после установки и разбора того, как работает фреймворк, как убрать из адресной строки index.php. Так как ссылки вида http://my_site/index.php/method/ как-то не очень читабельна и хотелось бы ее сократить до вида http://my_site/method/. Все оказалось очень просто. С помощью нескольки строк в файле .htaccess эта проблеа решалась:
RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] ErrorDocument 404 /index.php
Что дает эта директива. Во-первых она будет работать только в том случае если в Апачи включен модуль переадресации mod_rewrite. Если отключен - включаем, перезапускаем Апач. Во-вторых, если Апач настроен и готов редиректить, в .htaccess вписываем директиву <IfModule mod_rewrite.c>, в теле которой указываем, что готовы редиректить (RewriteEngine On) в корневую папку, куда будет редиректится апач. В моем случае это /. Потом идут инструкции, которые указывают на то, что редирект будет происходить только в случае, если файл или папка НЕ найдены на сервере (RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d). Собственно правило редиректа RewriteRule ^(.*)$ index.php?/$1 [L].
Во второй директиве <IfModule !mod_rewrite.c>, если модуль mod_rewrite в Апаче все-таки не активен, будет выведена страница об ошибке. Но как потом оказалось, это еще не все.. После создания .htaccess нужно в config.php забрать значение переменной $config['index_page'] = "index.php"; убрать index.php и оставить место пустым. То-есть $config['index_page'] = "". А так же выбрать значение переменной $config['uri_protocol'] = "PATH_INFO";, которая должна соответствовать конфигурации сервера.