"7 способов улучшить shell скрипты на /bin/sh (http://community.livejournal.com/ru_linux/1689071.html)"URL: http://community.livejournal.com/ru_linux/1689071.html
Новость: http://www.opennet.me/opennews/art.shtml?num=14887
самый главный (или самый первый) забыл -- писать на sh, а не на bash. на крайняк, честно писать, что это bash, а не sh. хотя, судя по freebsd-programmirovanie-na-shell, сам автор таких гадостей не делает.
> find ./ -name pkg-descr | xargs rmОпять? find ./ -name pkg-descr -exec rm {} +
Пусть автор откроет для себя -exec <cmd> {} +, а то, не бось, знает только о -exec <cmd> {} \;> 4. Ускорить grep
> Если вы ищите какую-то строку в больший объемах данных при помощи grep, то стоит использовать fgrep
> который позволяет искать только вхождения строк, а не регулярных выражений но и работает быстрее на
> 10-20%.Еще больше тормозов добавляют regexp'ы, если использовать конструкцию со скобками \(smth\).
> 6. Чтоб не дать команде выводить что-либо на экран
> Можно использовать перенаправление стандартного вывода и стандартного потока ошибок в /dev/null
> ping -c foo.bar > /dev/null 2>/dev/null
> После этого уже можно проверять код завершения этой программы.Еще можно использовать >&- 2>&-. Такой способ просто закроет file descriptor'ы. Это более правильный способ, но работает, к сожалению, не со всеми программами.
> kill -9 `ps -ax | grep PROCESS_NAME | grep -v grep | cut -c1-5`
А вот и автор пропалился о своем не ведении о команде pkill(1) и использовании SIGKILL для завершения работы программы, не говоря уже о том, что можно использовать один regexp вместо двух инкарнаций grep(1). Из списка можно еще удалить cut(1) и заменить всю конструкцию на
ps -ax -opid= -ocomm= | awk '/PROCESS_NAME/ { print $1 }' | xargs kill
или
pkill PROCESS_NAMEps, Вот еще интересная ссылка: http://partmaps.org/era/unix/award.html
Там рассказывается какие ошибки часто совершают новички и копипастеры при составлении скриптов на shell.
И пара таких ошибок есть в этой заметке в LJ.