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

    −135

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    parsemask() {
            echo -n "$@" | tr -d "\n" | sed -e "s#%%#\n#g" | sed -e "s#%C#$CLUSTER#g" | sed -e "s#%R#$XENXROOT#g" | tr "\n" "%";
            return;
    }
    
    for pvar in STATUSPATH LOGPATH DRBDLOGPATH XENXPREFIX CLUSTERSPATH; do
            eval R${pvar}="`parsemask "$(eval echo \\\$${pvar})"`"
    done

    Реализация разыменовки и замены в цикле, для того, чтобы для каждой переменной (например LOGPATH="%R/var/log/xenx/%C.log") определилась соответствующая переменная с произведёнными подстановками (например RLOGPATH="/usr/local/xenx/var/log/xenx/stormrage.log").

    Запостил: xaionaro, 14 Февраля 2011

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

    • гавнецо. на шелле когда начинаешь писать, остановится сложно. сам таким страдаю.

      да и шеллы тоже без всяких пайпов способны такие замены делать - `${VAR//pattern/string}`. (выглядеть будет еще говнее - но зато по крайней мере в пустую не будет процессы туды сюды создавать, электричество зря тратить.)
      Ответить
      • Забавно, что этот код у меня выскочил в результате рефакторинга :). А так, я, конечно, заменю tr и sed на встроенные операции, но всё остальное, похоже, будет жить ещё долго... =\
        Ответить
        • обрезок из моего .bashrc который вырезает все лишнее из $PWD для шелл промпта:
          XXX="$PWD"
          XXX="${XXX//$HOME/~}"
          XXX="${XXX//$LOGNAME/*}"
          XXX="${XXX//views/vi*}"
          XXX="${XXX//vobs/v*}"
          XXX="${XXX//install/inst*}"
          XXX="${XXX//src/s*}"
          echo $XXX

          (кучу лишних проекто-специфичных обрезаний я обрезал - реальный скрипт где-то втрое длинее.)
          Ответить

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