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

0

  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 xaionaro, (Updated )

Комментарии (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

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

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

Помни, guest, за тобой могут следить!

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


    8