dot rc

Sign in or create your account | Project List | Help

dot rc Git Source Tree

Root/rc/bash_functions_noti

Source at commit 49231b50e4583201bf2fce9e3312f09cea8b3aa0 created 3 years 3 months ago.
By Luciano M. F. Rocha, repath: ignore stuff under /usr/java that isn't a jdk or jre
1# # vim:filetype=sh:
2# .bashrc with functions for non- and interactive and login shells
3# current functions are only adding/inserting to $env, and PATH, etc.
4# construction
5
6## doc: check if executable exists
7_exists()
8{
9    [ -n "$1" ] && type -P "$1" &> /dev/null
10}
11
12## doc: convert text (xh ym zs) to seconds
13_str2time()
14{
15    echo $(($(echo " $*" | sed -e 's/s/ * 1 +/g' -e 's/m/ * 60 +/g' \
16        -e 's/h/ * 3600 +/g') + 0))
17}
18
19## doc: check if program/pid exists
20running()
21{
22    kill -0 $* &> /dev/null
23}
24
25## doc: repeat n.m ...: repeat execution n times (in m intervals)
26repeat() {
27    local n t c
28    n="$1"
29    shift
30
31    if [ -z "${n##*.*}" ]; then
32        t=$(_str2time ${n##*.})
33        n="${n%%.*}"
34    else
35        t=0
36    fi
37
38    while [ -z "$n" ] || [ "$((n--))" -gt 0 ]; do
39        "$@"
40        sleep $t
41    done
42}
43
44## doc: retry ...: execute command, and re-execute until it succeeds
45retry() {
46    local cmd="$1"
47    shift
48
49    if [ -z "$cmd" ]; then
50        echo "retry cmd [args]" 1>&2
51        return 1
52    fi
53
54    if ! type "$cmd" &> /dev/null; then
55        echo "can't find command $cmd" 1>&2
56        return 1
57    fi
58
59    while ! "$cmd" "$@"; do
60        sleep 1;
61    done
62}
63
64## doc: define $I_ARCH, $I_PREFIX_NOARCH, $I_PREFIX_ARCH depending on machine
65getarch()
66{
67    local arch u
68
69    ## don't redo
70    [ -z "$I_ARCH" ] || return 0
71
72    for u in -m -i -p; do
73        arch=$(uname $u 2>/dev/null)
74        [ -n "$arch" ] && [ "$arch" != unknown ] && break
75    done
76
77    unset I_ARCH_EXTRA
78
79    case "$arch" in
80        i[3456]86)
81        arch=i386
82        ;;
83        x86_64)
84        export I_ARCH_EXTRA=i386
85        ;;
86        ?ower*64|ppc64)
87        arch=ppc64
88        export I_ARCH_EXTRA=ppc
89        ;;
90        ?ower*|ppc)
91        arch=ppc
92        ;;
93    esac
94    export I_ARCH=$arch I_PREFIX_NOARCH=$HOME/opt/noarch \
95        I_PREFIX_ARCH=$HOME/opt/$arch
96}
97
98
99## doc: rescan opt dir and define paths
100repath()
101{
102    envappend PATH /usr/local/bin /usr/bin /bin
103    envappend PATH /usr/local/sbin /usr/sbin /sbin
104    [ -n "$PATH_LOCAL" ] && envinsert PATH "${PATH_LOCAL[@]}"
105
106    getarch
107    addarch noarch $I_ARCH_EXTRA $I_ARCH
108
109    addjava /usr/java/{default,latest,jdk,jre}*
110}
111
112## environment support functions
113envisin()
114{
115    local str
116    str=":$1:"
117    [ -z "${str%%*:$2:*}" ]
118}
119
120envput()
121{
122    local env check new where old sep arg
123
124    # args
125    where="$1"
126    env="$2"
127    shift 2
128
129    new=""
130    old=":${!env}:"
131    for arg; do
132        [ -d "$arg" ] || continue
133        ## remove from old
134        old="${old//:$arg:/:}"
135        ## add to new, if not yet in new
136        envisin "$new" "$arg" || new="${new:+$new:}$arg"
137    done
138    #until [ "${old/#:}" = "$old" ]; do old="${old/#:}"; done
139    #until [ "${old/%:}" = "$old" ]; do old="${old/%:}"; done
140    if [ -n "$new" ]; then
141        old="${old/#:}"
142        old="${old/%:}"
143        if [ "$where" = after ]; then
144            eval "$env"="${old:+$old:}$new"
145        else
146            eval "$env"="$new${old:+:$old}"
147        fi
148        export $env
149    fi
150}
151
152## doc: insert path in environment variable
153envinsert()
154{
155    envput before "$@"
156}
157
158## doc: append path to environment variable
159envappend()
160{
161    envput after "$@"
162}
163
164## scan architecture-dependent opt dir
165addarch()
166{
167    local arch dir
168    for arch; do
169        [ -d "$HOME/opt/$arch" ] || continue
170        for dir in $HOME/opt/$arch/*; do
171            [ -d "$dir" ] || continue
172            [ -d "$dir/bin" ] || envinsert PATH "$dir"
173            envinsert PATH "$dir"/{bin,sbin}
174            envinsert PERL5LIB "$dir"/lib{64,}/perl5{/site_perl,}
175            envinsert CPATH "$dir"/include
176            envinsert LIBRARY_PATH "$dir"/lib{64,}
177            envinsert PKG_CONFIG_PATH "$dir"/lib{64,}/pkgconfig
178            envinsert PYTHONPATH "$dir"/lib{64,}/python* \
179                "$dir"/lib{64,}/python*/site-packages
180        done
181    done
182    export PATH
183}
184
185## search for java
186addjava()
187{
188    local dir javac java
189
190    javac=""
191    java=""
192
193    for dir; do
194        if [ -e "$dir"/bin/javac -a -z "$javac" ]; then
195            javac="$dir"
196        fi
197        if [ -e "$dir"/bin/java -a -z "$java" ]; then
198            java="$dir"
199        fi
200    done
201    if [ -n "$javac" ]; then
202        export JAVA_HOME="$javac"
203        envinsert PATH "$javac/bin"
204    elif [ -n "$java" ]; then
205        export JAVA_HOME="$java"
206        envinsert PATH "$java/bin"
207    fi
208}
209

Archive Download this file

Branches:
master