dot rc

Sign in or create your account | Project List | Help

dot rc Git Source Tree

Root/rc/bash_functions_noti

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

Archive Download this file

Branches:
master