Oct
19
[lang_en]Previously… Useful bash functions
This new version is a tad more efficient since there are no more echo and pipes involved on the processing. Just one eval and one awk script.
[/lang_en][lang_pt]Previamente… Funções úteis em bash
Esta nova versão é ligeiramente mais eficiente, porque não existem mais comandos echo e pipes envolvidos no processamento. Apenas um eval e um script awk.
[/lang_pt]
1
2
3
4
5
6
7
8
9
10
11
12 unique_path() {
eval $(awk -v VAR="${1}" 'BEGIN { \
if((N=split(ENVIRON[VAR],vals,":"))<2) exit(0); \
sep = out="" ; i=split(out,seen); \
do { if(!(vals[++i] in seen)) { seen[vals[i]]; \
gsub("["]","\\"",vals[i]); \
out=sprintf("%s%s%s",out,sep,vals[i]); \
sep=":"; \
} } while (i<N); \
printf "%s="%s"; export %s;\n",VAR,out,VAR; \
}' /dev/null)
}
[lang_en]Similarly, these also had remove unnecessary uses of sub-shell echo…[/lang_en][lang_pt]Estas funções também foram melhoradas removendo usos desnecessários de sub-shells para echo[/lang_pt]
1
2
3
4
5
6
7
8
9
10
11 safe_prepend_path() {
VAR=$1 ; shift ; eval VAL=\$${VAR}
for i_;do [ -d "$i_" ] && VAL=$i_${VAL:+":$VAL"} ;done
eval export ${VAR}=${VAL}
}
safe_append_path() {
VAR=$1 ; shift ; eval VAL=\$${VAR}
for i_;do [ -d "$i_" ] && VAL=${VAL:+"$VAL:"}$i_ ;done
eval export ${VAR}=${VAL}
}