• Bash vulnerability opennet.ru Отличная уязвимость! А я давно говорю, что не стоит писать в шебанг #!/bin/bash, если в скрипте не используются башизмы. И вообще нужно по возможности стараться писать шелл скрипты, совместимые с классическим sh.

    Чем более простые используются компоненты, тем надёжнее результат.
    ♡ recommended by @beard

Replies (56)

  • @Self-Perfection, а лучше вообще стараться не писать шелл-скрипты
  • @netoneko, И компьютер не включать.
  • @Self-Perfection, Ох, шикарно! Не! Только чистый sh!
  • @Self-Perfection, зачем вообще писать на sh, это уебищный устаревший язык, который не годится ни для чего
  • @netoneko, Ой, да ну! И на чём прикажешь писать для ограниченных embeded-девайсов?
  • @nibb13, у вас в ограниченных эмбеддед-девайсах нет питона что ли?
  • @netoneko, И не будет. Нафиг такое счастье надо. Ты ещё скажи PHP и MySQL на роутер поставить. :)
  • @netoneko, Ни питона, ни пёрла, самое крутое — awk, и тот урезанный до невозможности, потому что bp Busybox.
  • @nibb13, ну на питон в роутер памяти хватит, a php и mysql это говно, которым нет смысла пользоваться, как и башем
  • @Self-Perfection, а что конкретно вы пишете на баше внутри роутера? просто интересно?
  • @Self-Perfection, Кстати, в busybox достаточный awk, IMHO. Мне для написания заполнения шаблона хватило.
  • @netoneko, Хватит. Но зачем? Шелла хватает для задач вплоть до advanced-уровня.
  • @nibb13, каких задач-то? для шелла даже обработка файлов с пробелами в именах — это уже advanced-уровень
  • @nibb13, А мне коллеги плакались, что awk в девайсе не поддерживает регулярные выражения для -F.
  • @netoneko, Например логику переключения между проводными и беспроводными сетями. Да, никакого NetworkManager.
  • @netoneko, У меня, к примеру, интернет-радио с веб-интерфейсом (лайки-дизлайки, currently playing всякий ajax'овый). Вся серверная часть на POSIX-шелле. Само радио сервится icecast + ices. Ну и самописная CMS на том же шелле.
  • @Self-Perfection, на баше? хардкорно
  • @netoneko, Это если вы его не умеете готовить. Просто всегда заключайте переменные в кавычки и всё будет ок.
  • @netoneko, Нет, баша там тоже нет. Там ash.
  • @nibb13, впечатляет, но зачем?
  • @netoneko, А чтобы ресурсы роутера не простаивали. Там целых 32 мб оперативы, из них треть свободна постоянно. И проц ничем не загружен. :)

    По большому счёту, JFF.
  • @nibb13, ну если JFF, то понятно
  • @Self-Perfection, Хмм, не приходилось -F использовать.
  • @netoneko, Вы как будто вообще ось под себя не настраивали никода. Любую мелкую автоматизацию в пару строк проще сделать на шелле. Потому что если тянуть питончик, то строк станет в два раза больше из-за импорта модулей.
  • @Self-Perfection, зато питон будет более поддерживаемым и можно будет писать более-менее хороший код. В продакшен автоматизацию на баше я бы не выпустил, а что там на локалхосте делается — неважно, конечно.
  • @Self-Perfection, В принципе, шелл-скрипт — достаточно мощный и достаточно удобный язык, если в него вникнуть. Проблемы обычно возникают у тех, кто не понимает как он работает.
  • @nibb13, В смысле, регулярку в качестве разделителя. Сейчас гляну на роутере — сработает ли?
  • @netoneko, Очень зря. Например, бывают ситуации, когда нужно чистить старые логи, а logrotate не подходит. Ну вот так криво сторонний блоб логирует.

    Проще всего написать однострочный скрипт в /etc/cron.daily:

    #!/bin/sh
    find /path/to/logs -type f -name 'МАСКА' -mtime +30 -delete

    И это будет гораздо более поддерживаемо и надёжно, чем скрипт на питоне.
  • @nibb13, Работает и с регуляркой. Busybox v1.15.3
    Вероятно, когда-то не работало.
  • @netoneko, Объясни нахера, на сервер ради одного скрипта ставить питон, и городить зоопарк?
  • @netoneko, Странно видеть слова "питон" и "хороший код" в одном предложении.
  • @kapsh, Ну это вы передёргиваете. Набыдлокодить можно на чём угодно. Я вот быдлокод в шелл скриптах гораздо чаще вижу, чем в питоно скриптах, но сдаётся мне, что это происходит исключить потому что с шелл скриптами я сталкиваюсь чаще.
  • @Self-Perfection, Можешь не исключать, я только его и пишу. Но даже мне стрёмно доверять языку, flow control в котором может сломаться из-за кривой табуляции в редакторе.
  • @kapsh, тьфу блин. должно было быть "исключительно потому что"
  • @caban, на сервере и так всегда есть питон
  • @kapsh, капш, ты еще хацкель не видел
  • @netoneko, Святая наивность! Держите случай из практики.

    Есть некоторый сервис, который должен выдавать всякую информацию по HTTP. Сервису иногда становится плохо и на запросы он перестаёт отвечать, поэтому для надёжности прям в пакет с этим сервисом включён watchdog:
    $ cat /etc/cron.d/myservice_watchdog
    /5 * root wget -O /dev/null 127.0.0.1:PORT/testurl || { service myservice restart; logger 'restarted by watchdog'

    Ставлю я этот сервис на демо машинку и вижу, что он постоянно перезапускается. Впрочем, в те моменты, когда он не перезапускается, работает он совершенно ожидаемым образом. Копаю, нахожу watchdog. Дёргаю сам тестовый URL и получаю корректный ответ. И тем не менее, судя по логам, сервис перезапускается именно этим вотчдогом. Чудеса!

    А потом оказывается, что в минимальной инсталляции CentOS wget не устанавливается по-умолчанию.

    А вы говорите python всегда есть...
  • @Kerrigan, А если вы мне скажете, что достаточно следить, чтобы питон был установлен и все скрипты писать не питоне, то это тоже не прокатывает. Внезапно содержимое пакета python2 между разными дистрибутивами может отличаться, и импортируемые вами в скриптах модули тоже могут оказаться не установлены.
  • @Self-Perfection, питон это часть Linux Standard Base, а wget — нет. Что в CentOS по умолчанию устанавливается, curl?
  • @netoneko, Про "часть LSB" интересно. Реквестирую пруфлинк или ключевые слова для поиска.

    Про curl точно не скажу: не помню.
  • @netoneko, Я надеялся на ссылку, из которой будет видно, что питон должен устанавливаться по-умолчанию. В приведённой ссылке я этого не вижу.

    Грубо говоря, там написано: "питон, предоставляемый системой, должен вести себя так". А написано где-нибудь "система должна обеспечивать доступность питона"?
  • @Self-Perfection, юзаю virtualenv, мне норм. Для особо ебанутых есть buildout
  • @Self-Perfection, refspecs.linuxfoundation.org “The LSB Languages specification defines components for runtime languages which are found on an LSB conforming system.”
  • @netoneko, Я как понимаю, кроме линукса ничего не существует?
  • @caban, нет, а зачем?
  • @netoneko, Ясно, да так знаешь, ещё достаточное кол-во Unix-подобных OS
  • @netoneko, И да, а что будет если python решать вынести из LSB как поступили с JAVA в своё время.
  • @caban, если ты пишешь приложение и не знаешь, куда его будут деплоить, у меня для тебя плохие новости
  • @netoneko, В данном контексте рассматривается, не приложение которое надо деплоить, вспомогательный скрипт, например, для мониторинга, на шелл-скриптах можно много чего написать, но зачем, они не для этого.
  • @caban, вспомогательный скрипт для мониторинга чего? почему он должен заботиться о чем-то кроме линукса? загадка
  • @netoneko, Потому что есть, другие OS, например скрипт для zabbix LLD.
  • @caban, проблемы заббикса
  • @netoneko, Ты хоть понял, про что я сейчас?
  • @Kerrigan, Видел, по сравнению с ним даже лисп нормальным языком покажется.