- 1
- 2
# mount /var/run or /run (DONTFIXME: obscure black magic)
mount_directory "$timestamp_base_dir" "$chroot_env_root"'/var/run'
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−122
# mount /var/run or /run (DONTFIXME: obscure black magic)
mount_directory "$timestamp_base_dir" "$chroot_env_root"'/var/run'
монтирование /var/run или /run (в зависимости от дистрибутива) в chroot, тоже в /var/run или /run, в зависимости от дистрибутива в chroot
−105
Предлагаю конкурс на лучшую реализацию задачи про стеки.
Язык - bash, python или любой скриптовый.
Номинируются такие стадии
1. Ленивая стека, push - o(n) pop o(1) top o(1)
2. Забывчивая стека, push - o(1), pop o(1) top o(1), для любого l : len(l)>=n push(l,x) = l
3. Стека-очередь, push переводит стеку в режим очереди, pop переводит в режим стеки. top - O(1)
4. Маразматическая стека, map (push l) (x1,x2,x3,x4) -> [x1, x1, x3, x3] o(n), pop(l) -> (x1,x1,x4) - номер сиротливого брата определяется старшим номером брата
5. Бинарная стека - push o(1) pop o(1) top o(1), sort o(1), shuffle o(log(n))
Номинантам лучших стадий будут достанутся приз
Главное - не программировать стеку, а показывать всем, как я это делаю.
До второй стадии осталось 22 часа. Второй шаг алгоритма
−132
found_files()
{
if [ "$DAY_CONF" = 'all_last' ]; then
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep -v `date "$DATE_PREFIX"` )
fi
if [ "$DAY_CONF" = 'last' ]; then
if [ "`date +%d`" -eq '01' ]; then
case "`date +%m`" in
02|04|06|09|11 )
need_date=31;
;;
03 )
if [ -n "$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep `date +%Y0229` )" ]; then need_date=29; else need_date=28; fi;
;;
* )
need_date=30;
;;
esac
if [ "`date +%m`" -eq '01' ]; then
need_month=12
need_date=31
need_year=$(( `date +%Y` - 1 ))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep "$need_year$need_month$need_date" )
else
need_month=$((`date +%m` - 1 ))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | egrep `date ${DATE_PREFIX%%%m*}[0]*$need_month$need_date` )
fi
else
need_date=$((`date +%d` - 1))
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | egrep `date ${DATE_PREFIX%%%d*}[0]*$need_date` )
fi
fi
if [ "$DAY_CONF" = 'today' ]; then
files=$( ls -1 "$FILEPATH" | grep "$FILE_PREFIX" | grep `date "$DATE_PREFIX"` )
fi
echo $files
}
Замечательная функция поиска файлов "за вчера". Находит файлы не только "за вчера".
Автор неизвестен.
−107
#!/usr/bin/env zsh
A=( q w e r t y u i o p a s d f g h j k l z x c v b n m )
B=( Q W E R T Y U I O P A S D F G H J K L Z X C V B N M )
C=( 0 1 2 3 4 5 6 7 8 9 A B C D E F ) #hex
F=( 1 2 4 )
D=40
E=10
Char::GetRandA(){
echo ${A[$(shuf -n 1 -i 1-${#A[@]})]}
}
Char::GetRandB(){
echo ${B[$(shuf -n 1 -i 1-${#B[@]})]}
}
Char::GetRandC(){
echo ${C[$(shuf -n 1 -i 1-${#C[@]})]}
}
Char::GetRandF(){
echo ${F[$(shuf -n 1 -i 1-${#F[@]})]}
}
Main::Matrix(){
for i in {1..$D}; do
for b in {A,B,C}; do
echo -n '\033[0;3'$(Char::GetRandF)"m$(Char::GetRand$b) "
done
done
}
#Run
for i in {1..$E}; do
Main::Matrix
done
дело было вечером...
−116
#!/bin/sh
#
# $1 is the mail account
[ -n "$1" ] && {
MAIL_PATH="/Mail/$1/mbox"
OUTPUT_MAIL_PATH="/mnt/flash/save/email/inbox/"
mkdir -p $OUTPUT_MAIL_PATH
mv /var/spool/mail/root/* $MAIL_PATH
for j in `find $MAIL_PATH -name "msg.*"`
do
MAIL_NAME=`basename $j`.eml
NEW_MAIL="$OUTPUT_MAIL_PATH/$MAIL_NAME"
mkdir -p "$OUTPUT_MAIL_PATH"
[ ! -f "$NEW_MAIL" ] && {
grep "^From:" $j | head -n 1 > $NEW_MAIL
if grep "^Cc:" $j ; then
grep "^Cc:" $j | head -n 1 >> $NEW_MAIL
fi
grep "^To:" $j | head -n 1 >> $NEW_MAIL
grep "^Subject:" $j | head -n 1 >> $NEW_MAIL
grep "^Date:" $j | head -n 1 >> $NEW_MAIL
if grep "^Content-Type: text/plain;" $j ; then
LINE_NUM=`grep -n "^Content-Type: text/plain;" $j | cut -d: -f1`
if grep "^Content-Type: text/plain;" $j | grep "charset=" ; then
TYPE=`grep "Content-Type: text/plain;" $j | cut -d";" -f1`
echo "$TYPE" >> $NEW_MAIL
CHAR="charset="`grep "Content-Type: text/plain;" $j | cut -d= -f2`
echo "$CHAR" >> $NEW_MAIL
else
grep "^Content-Type: text/plain;" $j >> $NEW_MAIL
x=$(($LINE_NUM+1))
sed -n "$x"p $j >> $NEW_MAIL
fi
x=$(($LINE_NUM-1))
BOUNDARY=`sed -n "$x"p $j`
for i in `sed "/$BOUNDARY/s/.*/ffffuuuucccckkkk/" $j | grep -n "ffffuuuucccckkkk" | cut -d: -f1`
do
if [ "$i" -gt "$LINE_NUM" ] ; then
i=$(($i-1))
y=$(($LINE_NUM+3))
echo "Mail content start:" >> $NEW_MAIL
sed -n "$y,$i"p $j >> $NEW_MAIL
break
fi
done
if ! grep "Mail content start:" $NEW_MAIL ; then
echo "Mail content start:" >> $NEW_MAIL
y=$(($LINE_NUM+3))
x=`grep -c "^" $j`
sed -n "$y,$x"p $j >> $NEW_MAIL
fi
else
echo "Fuck....."
fi
}
done
}
/bin/mail.sh из прошивки букридера GreenBook
−352
#!/bin/bash
function f() {
sleep "$1"
echo "$1"
}
while [ -n "$1" ]
do
f "$1" &
shift
done
wait
example usage:
./sleepsort.bash 5 3 6 3 6 3 1 4 7
Метод сортировки :)
Взято с:
http://dis.4chan.org/read/prog/1295544154
−127
type="${(@j::M)${(@)tmp#-}#?}"
if (( $tmp[(I)-g*] )); then
glob="${${${${(@M)tmp:#-g*}#-g}##[[:blank:]]#}%%[[:blank:]]#}"
[[ "$glob" = *[^\\][[:blank:]]* ]] &&
glob="{${glob//(#b)([^\\])[[:blank:]]##/${match[1]},}}"
# add `#q' to the beginning of any glob qualifier if not there already
[[ "$glob" = (#b)(*\()([^\|\~]##\)) && $match[2] != \#q* ]] &&
glob="${match[1]}#q${match[2]}"
fi
zsh, избранное из _files: остальное чуть лучше.
Зато... хм, портабельно (в смысле между не оболочками, а платформами).
−130
Request() {
Info "Добро пожаловать в VKSearch $sys_version!"
Info "Загрузка списка треков..."
vkapi_signature=$(echo -n "${vkapi_id}api_id=1696393count=${cfg_search_count}method=audio.searchq=${query}test_mode=1v=2.0${vkapi_secret}"|md5sum|awk '{print $1}')
wget "http://api.vkontakte.ru/api.php?api_id=1696393&count=${cfg_search_count}&v=2.0&method=audio.search&sig=${vkapi_signature}&test_mode=1&q=$query" -qO "${sys_temp}/vksearch.out"
found=$(cat ${sys_temp}/vksearch.out | sed -ne 's,<count>\([^<]*\)</count>,\1,p'|sed 's/^[ \t]*//')
error_msg="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_msg>\(.*\)</error_msg>|\1|p'|sed 's/^[ \t]*//'|head -n1 )"
error_code="$(cat ${sys_temp}/vksearch.out | sed -n 's|<error_code>\(.*\)</error_code>|\1|p'|sed 's/^[ \t]*//'|head -n1)"
[ -n "$error_msg" ] && Info "Ошибка: $error_msg (Код $error_code)" die
song_count=$(cat ${sys_temp}/vksearch.out | grep '<url>'|wc -l )
[ $song_count -eq 0 ] && Info "По запросу ${query} не найдено ни одного трека..." die || Info "По запросу ${query} найдено ${found} композиций. Обработка первых ${song_count}."
}
Parse() {
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.out | sed -n 's|<url>\(.*\)</url>|\1|p'|sed 's/^[ \t]*//' ` )
song_artists=( `cat ${sys_temp}/vksearch.out | sed -n 's|<artist>\(.*\)</artist>|\1|p'|sed 's/^[ \t]*//' ` )
song_titles=( `cat ${sys_temp}/vksearch.out | sed -n 's|<title>\(.*\)</title>|\1|p'|sed 's/^ //' ` )
song_durations=( `cat ${sys_temp}/vksearch.out |sed -n 's|<duration>\(.*\)</duration>|\1|p'|sed 's/^[ \t]*//' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
}
RemoveDoubles() {
rm ${sys_temp}/vksearch.pars* 2>&-
Info "Начинаю удаление треков с одинаковой длительностью..."
for i in `seq 0 $song_counts`
do
echo "<1>${song_durations[$i]}<2>${song_artists[$i]}<3>${song_titles[$i]}<4>${song_urls[$i]}<5>" >> ${sys_temp}/vksearch.parsing
done
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 > ${sys_temp}/vksearch.parsed
cat ${sys_temp}/vksearch.parsing | sort -n | uniq -w 6 -d > ${sys_temp}/vksearch.doubles
OLD_IFS=$IFS
IFS=$'\n'
song_urls=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<4>\([^<]*\)<5>.*,\1,p' ` )
song_artists=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<2>\([^<]*\)<3>.*,\1,p' ` )
song_titles=( `cat ${sys_temp}/vksearch.parsed | sed -ne 's,.*<3>\([^<]*\)<4>.*,\1,p' ` )
song_durations=( `cat ${sys_temp}/vksearch.parsed |sed -ne 's,.*<1>\([^<]*\)<2>.*,\1,p' ` )
song_counts=$(( ${#song_urls[@]} - 1 ))
IFS=$OLD_IFS
Info "В плейлисте осталось ${#song_urls[@]} треков."
}
парочка функций из моего проекта VKSearch - поиск и сохранение музыки ВКонтакте на shell... -_-
−144
#! /bin/sh
# some code
daemon1="/usr/home/daemon1.sh"
daemon2="/home/daemon2.sh"
# some code with variables
Скрипт на BSD. Хомяк находится в /usr/home, а /home симлинк на него
−129
#!/bin/bash
EMAIL="Your email"
PASSWORD="your password"
USERAGENT="Mozilla/5.0 (X11; Linux i686; rv:2.0.1) Gecko/20110529 Firefox/4.0"
curl -A "$USERAGENT" -c /tmp/vklogin.cookie -d "pass=$PASSWORD&email=$EMAIL" http://login.vk.com/?act=login -L | iconv -f cp1251 > /tmp/vklogin
perl -e "while(<STDIN>) {\$a=\$_; if(\$a =~ /^\s*<input[^>]*?name='([^']*)'[^>]*?value='([^']*)'\s*\/>/i) {print \"\$1=\$2&\";}}" < /tmp/vklogin > /tmp/vklogin.postdata
POSTDATA="$(cat /tmp/vklogin.postdata)"
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vkontakte.ru/login.php -L -v 2>&1 | iconv -f cp1251 &> /dev/null
echo 1 > /tmp/vklogin.mailid
echo 1 > /tmp/vklogin.mailoutid
while [ `cat /tmp/vklogin.mailid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail -L | iconv -f cp1251 > /tmp/vklogin.mail
cat /tmp/vklogin.mail | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailid
for i in $(cat /tmp/vklogin.mailid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=inbox&hash=1309098903_0eefa6ea250675f38e&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
while [ `cat /tmp/vklogin.mailoutid | wc -l` -gt 0 ]; do
curl -A "$USERAGENT" -d "$POSTDATA" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/mail?section=outbox -L | iconv -f cp1251 > /tmp/vklogin.mailout
cat /tmp/vklogin.mailout | perl -e "while(<STDIN>) {if (\$_ =~ /.*mail.deleteMsg\((\d*)/) {print \"\$1\n\";} }" > /tmp/vklogin.mailoutid
for i in $(cat /tmp/vklogin.mailoutid); do
curl -A "$USERAGENT" -d "act=a_delete&al=1&from=outbox&hash=1309103621_59302e5e1b1a924a70&id=$i" -b /tmp/vklogin.cookie -c /tmp/vklogin.cookie http://vk.com/al_mail.php -L | iconv -f cp1251
done
done
rm /tmp/vklogin*
Удаляет все сообщения на vk.com
Наверное hash надо будет заменить.