The OpenNET Project / Index page

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

7 способов улучшить shell скрипты на /bin/sh

21.03.2008 21:53

"7 способов улучшить shell скрипты на /bin/sh"

  1. Главная ссылка к новости (http://community.livejournal.c...)
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/14887-shell
Ключевые слова: shell
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (2) RSS
  • 1, Great.Megatron (?), 22:24, 21/03/2008 [ответить]  
  • +/
    самый главный (или самый первый) забыл -- писать на sh, а не на bash. на крайняк, честно писать, что это bash, а не sh. хотя, судя по freebsd-programmirovanie-na-shell, сам автор таких гадостей не делает.
     
  • 2, Анон (?), 01:31, 22/03/2008 [ответить]  
  • +/
    > 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.

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



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

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