Beri bash i ebash / Говнокод #28416 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
#!/bin/bash

CODE='timezone.txt'
WDIR="dl-${CODE}"
TGTDIR="/etc/puppet/modules/nginx/files/etc/nginx/maxmind/"
URL='http://www.maxmind.com/timezone.txt'

mkdir "${WDIR}"
cd "${WDIR}"
wget ${URL} -O "${CODE}"

find -name "${CODE}" | while read F
do
  chown root:root -vf "${F}"
  chmod -vf 644 "${F}"
  mv -vf "${F}" "${TGTDIR}"

  TMPDIR=`dirname "${F}"`
  if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
  then
    # root's rm -rf safety
    continue
  fi
  echo rm -rfv "${TMPDIR}"
  rm -rfv "${TMPDIR}"
done

Задача стояла всего лишь скачать txt файл.

Запостил: alexeykey alexeykey, (Updated )

Комментарии (10) RSS

  • Код написан вполне себе по канонам шелл программирования (баш точнее, двойные скбоки -- башизм ради ||), но есть странные вещи:
    * нафига find скачанного файла? Может быть realpath хотя бы?
    * CODE лучше бы передавать аргументом ( ане через глобальную переменную окруженмя)
    * на 14 строчке лучше бы проверить, что файл есть
    * защита на 19 строке -- странная. А если там ``/etc/`` ? А если ``~`` ?
    * ${TMPDIR} лучше всегда брать в кавычки если уж по канонам
    Ответить
  • >set -e
    ...тут бы точно не был лишним

    >CODE='timezone.txt'
    >WDIR="dl-${CODE}"
    Скрипт оперирует относительными путями, что намекает, что скрипт рассчитывает быть вызванным из определенной директории. Каков будет багор, если в $PWD будет, скажем, /sys? Всё выглядит так, что текущая директория здесь используется как временная, так что можно было условиться использовать /tmp по её прямому назначению, тем самым оперировать абсолютными путями и избавиться от хаков с find / realpath и root's rm -rf safety

    >chown root:root -vf "${F}"
    >chmod -vf 644 "${F}"
    А как такое может быть, что файл создался wget'ом с неправильными правами? Защита от предыдущего запуска скрипта от неверного пользователя?

    >if [[ ${TMPDIR} == '.' || ${TMPDIR} == '..' || ${TMPDIR} == '/' ]]
    Микродоёбка: можно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй, то и ладно
    if [ "$TMP" = 'aaa' ] || [ "$TMP" = 'bbb' ] ... etc
    Ответить
    • >Скрипт оперирует относительными путями
      Это плохо, да

      >, так что можно было условиться использовать /tmp
      ``mktemp(1)``

      >А как такое может быть, что файл создался wget'ом с неправильными правами?
      ``umask(2)``, ``apropos umask``

      >>ожно избавиться от башизма, будет выглядеть чуть грязнее, но если на портабельность этого говна похуй,
      Если на портабельность похуй, то зачем избавляться от башизма?:)
      Ответить
  • Чем std::get_money отличаетсчя от std::money_get ?
    Ответить
    • std::get_money — манипулятор, который извлекает из стрима денежную сумму, используя фасет std::money_get текущей локали стрима.
      Ответить
      • понятно

        Второй умеет выпаршивать тугрики из строк, а первый использует его чтобы из стрима читать
        Ответить
  • КАКАЯ ГНИДА МИНУСУЕТ???? СЛАБО В ЛИЦО СКАЗАТЬ ЧТО НЕ ТАК???
    Ответить
    • Истеричка, тут тебе не двач. Вот за пожар в жопе я тебя и минусну.
      Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8