А давайте я напишу немного про bash. Вроде бы про него не писал еще, хотя юзаю.
Bash -- это такой язык командной оболочки. В большинстве юникс-систем по умолчанию используется именно он. Хотя полно и других языков, zsh, например, клевая штука (но я не использую).
С его помощью можно, во-первых, повелевать консолью, во-вторых, автоматизировать все подряд, в-третьих, делать для себя всякие нужные тулы.
Инфы по bash в инете море, тема раскрыта исчерпывающе. Но я напишу про то, как я повелеваю консолью, чего автоматизирую, и какие тулы себе сделал.
Консоль, конечно, мегаудобная штука для многих задач (а для многих других не удобная). Но настоящему ленивому программисту лениво писать что-то вроде
svn revert --depth infinity
ибо слишком много букв. Хорошо бы обойтись 5-10 буквами, а лучше двумя.
Ну не вопрос, для этого есть альясы:
# working with file system
alias ll='ls -l'
alias la='ls -A'
alias l='ls -CF'
alias rm='rm -i'
alias rmf='rm -rf'
alias rmt='rm -rf temp'
alias cp='cp -ir'
alias mv='mv -i'
alias mkdir='mkdir -p'
alias cdy='cd /mnt/2send/yura'
# working with subversion
alias ss='svn status'
alias su='svn update --set-depth=infinity'
alias sc='svn commit -m '
alias si='svn propedit svn:ignore '
alias sd='svn diff -r HEAD '
alias sr='svn revert --depth infinity '
alias srw='svn resolve --accept=working '
alias sm='svn merge '
alias check='find . -maxdepth 1 | xargs svn status'
alias rmsvn='find . -name .svn | xargs rm -rf'
# working with git
alias gs='git status'
alias ga='git add'
alias gc='git commit -m '
# working with maven
alias mi='mvn install -Dmaven.test.skip=true'
alias mci='mvn clean install'
# search
alias gg='find . -name \*as -o -name \*mxml | xargs grep'
alias ggg='find . -name \*java -o -name \*scala | xargs grep'
alias gggg='find . -type f | xargs grep'
В первую очередь -- бэкап данных. Скрипт приводить не буду, ибо во-первых, он большой. Во-вторых, он тупой -- просто берем файлы из одних мест и копируем в другие. Запускаем по крону, и все дела.
Еще неплохо бы автоматизировать монтирование внешних файловых систем. Линукс мой живет в чужеродном окружении, кругом винда. И нужно монтировать разные каталоги разных виндовых машин к себе. А чтобы сделать это правильно, нужна длинная и скучная команда.
Посему пихаем все это дело в скрипт и запускаем его на старте (ну или когда понадобится).
#!/bin/bash
function mount_environment
{
RESOUCE=$1
MOUNT_POINT=$2
mount -t cifs $RESOUCE $MOUNT_POINT \
-o user=your_windows_login,pass=your_windows_pass \
-o uid=yura,gid=yura \
-o file_mode=0644,dir_mode=0755
}
mount_environment //192.168.0.101/2send /mnt/2send
mount_environment //192.168.0.102/backup /mnt/backup
mount_environment //192.168.0.102/projects /mnt/projects
mount_environment //192.168.0.102/fms/ /mnt/fms
Ну и никто не запрещает использовать bash для автоматизации сборки проектов. Тут уж можно на низком уровне сделать чего угодно, и даже такого, чего не умеют делать Ant и Maven. Одна только беда -- сборщик будет не кроссплатформеный. Так что если у вас в команде нет разработчиков, использующих винду, то welcome :) Хотя, в принципе, bash и под виндой можно юзать.
Для разминки генерилка паролей
#!/bin/bash
LENGTH=$1
if [ -z $LENGTH ]; then LENGTH=10; fi
echo `</dev/urandom tr -dc A-Za-z0-9 | head -c$LENGTH`
А теперь клевая штука -- скрипт, показывающий статистику по проекту -- сколько в нем файлов и строк кода.
Довольно странно, что ни Eclipse, ни Intellij IDEA такую статистику показывать не умееют. (Или умеют, но я об этом не знаю). А ведь хочется знать :)
#!/bin/bash
DIR=$1
if [ -z $DIR ]; then
DIR=`pwd`
fi
cd $DIR
C=0
L=0
function sum
{
N=`wc -l $1 | cut -d' ' -f1`
C=$(($C + 1))
L=$(($L + $N))
}
function stat()
{
HINT=$1
FILTER=$2
C=0
L=0
for i in $( $FILTER ); do
sum $i
done
echo "$HINT classes:$C lines:$L"
}
stat 'Java:' 'find . -name *.java'
stat 'Flex:' 'find . -name *.as -o -name *.mxml'
stat 'FMS:' 'find . -name *.asc'
stat 'PHP:' 'find . -name *.php'
stat 'html/js:' 'find . -name *.js -o -name *.htm -o -name *.html'
stat 'Erlang:' 'find . -name *.erl -o -name *.hrl'
stat 'Scala:' 'find . -name *.scala'
stat 'Groovy:' 'find . -name *.groovy'
С помощью этого скрипта можно узнать о своем (или чужом) проекте что-то такое:
yura ~/p/rtmp-service-mate-ext $ code_stat Java: classes:3 lines:196 Flex: classes:17 lines:1155 FMS: classes:2 lines:69 PHP: classes:0 lines:0 html/js: classes:9 lines:1629 Erlang: classes:0 lines:0 Scala: classes:0 lines:0 Groovy: classes:0 lines:0 yura ~/p/flex-logging-console $ code_stat Java: classes:0 lines:0 Flex: classes:16 lines:767 FMS: classes:0 lines:0 PHP: classes:0 lines:0 html/js: classes:9 lines:1629 Erlang: classes:0 lines:0 Scala: classes:0 lines:0 Groovy: classes:0 lines:0 yura ~/stuff/bigbluebutton $ code_stat Java: classes:672 lines:90429 Flex: classes:279 lines:23588 FMS: classes:0 lines:0 PHP: classes:11 lines:1344 html/js: classes:68 lines:39609 Erlang: classes:0 lines:0 Scala: classes:12 lines:1131 Groovy: classes:86 lines:5238
enjoy :)
Add new comment