1. bash / Говнокод #22462

    −127

    1. 1
    ws_root=$(echo 'echo "HackHackHackHack $WS"' | enter_ref_view $foo | awk '/HackHackHackHack/{print $2}')

    Дано: скрипт в 9000 строк на perl, enter_ref_view. Он запускает шелл, в котором выставлена переменная FOO.
    Найти: вывести переменную WS наружу
    Решение: ....

    Запостил: CHayT, 01 Марта 2017

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

    • SEO-пост: #смекалочка
      P.S. не FOO, а WS.
      Ответить
    • Лобовое решение - прицепиться к процессу новосозданного шелла через GDB и оттуда каким-то хреном выковырять эту переменную
      Ответить
      • > прицепиться к процессу новосозданного шелла через GDB и оттуда каким-то хреном выковырять эту переменную

        Напиши скрипт, который делает это, и выложи отдельным постом, он явно получится подходящим к тематике сайта.

        Хак сложноват, можно упростить до
        ws_root=$(echo 'printenv WS' | enter_ref_view $foo)
        Ответить
        • Этот скрипт ещё кучу всего печатает при старте, так что нет.
          Ответить
          • > Этот скрипт ещё кучу всего печатает при старте
            Тогда нужно печатать во временный файл
            Ответить
      • Можно попробовать изменить переменную SHELL перед запуском скрипта на нечто, выводящее только нужную инвормацию.
        Ответить
        • SHELL многие проги/скрипты меняют - для того что бы избегать конфликтов с шеллом пользователя. но иногда работает.

          если он на самом деле запускает штатный борн* шелл в интерактивном режиме, то тогда можно попробовать помучать $PROMPT_COMMAND. по крайней мере простой тест работает:
          $ PROMPT_COMMAND='echo HELLO; exit' bash -i
          HELLO
          $
          Ответить
    • лол. это почти как мой хак выдергивания переменных из мэйкфайлов:
      get_make_var()
      {
         local VARNAME="$1"
         echo 'uniq123:;echo $('$VARNAME')' | make -f Makefile -f - -silent --no-print-directory uniq123
      }

      (из продакшена, и в шелле и в мэйках такое используется; писал по памяти, может где глючит)

      гавно. но как без него.
      Ответить
      • Хм. В этом есть некая извращённая эстетика.
        Ответить
        • основано на малоизвестной фиче что мэйк умеет читать несколько файлов, включая stdin. я начал с тупых попыток патченья мэйкфайлов, потом задался вопросом а можно ли несколько раз -f делать. потом попробовал с `-f -` и о чудо оно работает. ломается только если в мэйке есть какие извраты которые что-то уже на экран печатают. ... хм, а в этом случае можно тогда тот `echo` в темп файл перенаправить.
          Ответить
    • показать все, что скрыто>>HackHackHackHack
      блядь, ну кто так пишет.

      ___ERICCSON_MARKER_V_1_cd171f7c_560d_4a6 2_8d65_16b87419a58c
      Ответить

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