The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"OpenNews: 7 способов улучшить shell скрипты на /bin/sh"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"OpenNews: 7 способов улучшить shell скрипты на /bin/sh"  
Сообщение от opennews on 21-Мрт-08, 22:24 
"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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "7 способов улучшить shell скрипты на /bin/sh"  
Сообщение от Great.Megatron email on 21-Мрт-08, 22:24 
самый главный (или самый первый) забыл -- писать на sh, а не на bash. на крайняк, честно писать, что это bash, а не sh. хотя, судя по freebsd-programmirovanie-na-shell, сам автор таких гадостей не делает.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "не густо"  
Сообщение от Анон on 22-Мрт-08, 01:31 
> 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_NAME

ps, Вот еще интересная ссылка: http://partmaps.org/era/unix/award.html
Там рассказывается какие ошибки часто совершают новички и копипастеры при составлении скриптов на shell.
И пара таких ошибок есть в этой заметке в LJ.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру