1. Куча / Говнокод #17599

    +133

    1. 1
    2. 2
    3. 3
    4. 4
    STEAMROOT="$(cd "${0%/*}" && echo $PWD)")
    
    ...
     rm -rf "$STEAMROOT/"*

    http://www.opennet.ru/opennews/art.shtml?num=41469

    эпик фейл
    #юмор
    #идиоты

    Запостил: Lure Of Chaos, 07 Февраля 2015

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

    • А в чем, собственно, фейл?
      Ответить
      • Ссылку то не открыть, да?
        Ответить
      • В том, что стим встал на пьедестал почёта вместе с бамблби и яндекс диском. Правда только на третье место, т.к. тут надо руками поработать, чтобы стим применил патч бармина.
        Ответить
        • причем ошибка очень глупая, и, язык повернется сказать далее - очевидная!
          или это только у меня при чтении кода перед глазами "автоматически" в переменные и плейсхолдеры мысленно подставляются граничные и "невероятные" значения, типа null, пустой строки, 0, NaN, минимальное\максимальное значения, при которых код может упасть с ошибкой или отработать некорректно?
          что особенно тревожно в контексте потенциально опасных операций типа delete, eval, а в данном случае и rm - как можно было не предположить, что переменной окружения не окажется в среде окружения?

          ведь, на самом деле, элементарных ошибок не так много (как-то: выход за пределы границ [массива], разыменование нулевого указателя, использование-после-освобождения) и, к прочему, все обильнее ловятся современными инструментами статического анализа. я совсем не веду речи про ошибки логического уровня (логичное с точки зрения машины, но неожиданное с точки зрения человека поведение)

          посему и последний тег в топике.
          Ответить
          • > только у меня
            > null, пустой строки, 0, NaN
            > все обильнее ловятся современными инструментами статического анализа
            Может, в этом и дело? Пока Вы писали огнеупорный код на жс и делали вручную то, что мог сделать статический анализ, хаскелепитушки размякали, полагались на конпелятор, не укрепляли тылы и не были подготовлены к такому раскладу.
            Ответить
            • раз уж припомнили жс, то я помню времена, когда у нас из инструментов отладки был одинокий и могучий alert, и никакого статического анализа мы не знали...
              впрочем, тогда и программы были меньше и проще, у нас не было многопоточности и почти что не было асинхронности (т.е. она формально была, но мы ее не замечали), у нас не было построения интерфейсов в браузерах и мвц на жс и компиляторов в интерпретируемые языки.....
              Ответить
              • Так и просится сюда картинка с котом и надписью "что же с нами стало".
                http://cs425322.vk.me/v425322176/15a1/Ugdcp8r-6Us.jpg
                Ответить
        • Так вот именно, $0 не так уж просто подменить. По крайней мере не очевидно.
          Ответить
    • Первое выражение - вообще бред какой-то. Человек скорее всего вообще не понимал, что писал. Если я правильно понял задумку, то это должно было быть эквивалентно dirname $0, или я таки чего-то не понял?
      Ответить
      • с переходом в туда...
        Ответить
        • Ну переход-то делается в шелле, который тут же закрывается, что как-бы бессмысленно, если можно просто получить путь, без перехода.

          Нет, там вообще пиздец какой-то, просто даже количество скобок и кавычек не сходится. Наверное все-таки последнию скобку и кавычку нужно поменять местами.
          Ответить
          • Вернее, нет, последняя скобка не нужна.
            Ответить
      • это получение расположения скрипта
        Ответить
        • есть такой запрос (сейчас не нашел), по которому первым ответом вываливается очень похожий ответ с SO
          Ответить
          • но это все равно детские ошибки.

            для скриптов которы под рутом крутятся, нужно быть как минимум параноидальным.

            `set -e` по минимуму. иногда `set -o pipefail` и `set -u`.

            `set -e` должен был отловить обломавшийся `cd`.

            ЗЫ ну да Steam еще только в зачатке. им простительно.
            Ответить
      • > эквивалентно dirname $0,

        Не совсем. cd $(dirname $0) && echo $PWD -- напечатает каноничный абсолютный путь к директории.
        Ответить
        • А ну в таком случае можно было readlink добавить.
          Ответить
    • Прыще ляди соснули. Рм рф опасная команда, и на "$whui/" её лучше не натравливать, ибо в ебаном баше всё непредсказуемо.
      Ответить
      • Вообще лучше слеш в конце не ставить, звёздочку тем более.
        Ответить

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