source: trunk/SH/arb_path.sh

Last change on this file was 19265, checked in by westram, 2 years ago
  • script to replace realpath and command -v.
  • Property svn:executable set to *
File size: 2.8 KB
Line 
1#!/bin/bash
2# Script to replace uses of 'realpath' and/or 'command -v'
3
4echoerr() {
5    cat <<< "$@" 1>&2
6}
7
8arb_realpath() {
9    # replacement for 'realpath'
10    #
11    # Note: this function is duplicated in ../arb_install.sh@arb_realpath
12    local FILE="$1"; shift
13
14    local REALPATH=$(realpath    "$FILE" 2>/dev/null )
15    local READLINK=$(readlink -f "$FILE" 2>/dev/null )
16
17    if [ -z "${REALPATH}" ]; then
18        if [ -z "${READLINK}" ]; then
19            echoerr "Warning: neighter realpath nor readlink works here"
20            if [ -e "${FILE}" ]; then
21                local PWDFILE="$(pwd)/${FILE}"
22                if [ -e "${PWDFILE}" ]; then echo "${PWDFILE}"
23                else echo "${FILE}"
24                fi
25            else echo "${FILE}"
26            fi
27        else echo "${READLINK}"
28        fi
29    else
30        if [ -z "${READLINK}" ]; then echo "${REALPATH}"
31        else
32            if [ "${READLINK}" != "${REALPATH}" ]; then
33                echoerr "Warning: realpath and readlink differ (REALPATH=${REALPATH} READLINK=${READLINK})"
34            fi
35            echo "${REALPATH}"
36        fi
37    fi
38}
39
40arb_full_cmd() {
41    # report full path of external command (as found by shell via PATH)
42    local CMD="$1"; shift
43    local FULLCMD=$(command -v "${CMD}" 2>/dev/null )
44    if [ -n "${FULLCMD}" -a ! -x "${FULLCMD}" ]; then echoerr "[no valid full command for '${CMD}: '${FULLCMD}']"; FULLCMD=; fi
45    if [ -z "${FULLCMD}" ]; then
46        FULLCMD=$(hash -t "${CMD}" 2>/dev/null )
47        if [ -n "${FULLCMD}" -a ! -x "${FULLCMD}" ]; then echoerr "[no valid full command for '${CMD}: '${FULLCMD}']"; FULLCMD=; fi
48        if [ -z "${FULLCMD}" ]; then
49            FULLCMD=$(which "${CMD}" 2>/dev/null )
50            if [ -n "${FULLCMD}" -a ! -x "${FULLCMD}" ]; then echoerr "[no valid full command for '${CMD}: '${FULLCMD}']"; FULLCMD=; fi
51        fi
52    fi
53    if [ -n "${FULLCMD}" ]; then
54        FULLCMD=$(arb_realpath "${FULLCMD}")
55    fi
56    echo "${FULLCMD}"
57}
58
59usage_error() {
60    local ERR="$1"; shift
61
62    echoerr "Usage: arb_path.sh -r file"
63    echoerr "       replacement for 'realpath file' (generates canonical pathname)."
64    echoerr "       falls back to given input on failure to canonicalize."
65    echoerr "Usage: arb_path.sh -x cmd"
66    echoerr "       replacement for 'command -v file' (finds executable; absolute, relative or via PATH)."
67    echoerr "       returns empty string if 'cmd' not found."
68    echoerr ""
69    echoerr "Error: ${ERR}"
70    exit 1
71}
72
73FLAG="$1" ; shift
74ARG="$1" ; shift
75
76if [ -z "${ARG}" ]; then
77    usage_error "missing argument(s)"
78else
79    if [ "${FLAG}" = "-r" ]; then
80        echo $(arb_realpath "${ARG}")
81    else
82        if [ "${FLAG}" = "-x" ]; then
83            echo $(arb_full_cmd "${ARG}")
84        else
85            usage_error "Unknown flag '${FLAG}'"
86        fi
87    fi
88fi
89
90
Note: See TracBrowser for help on using the repository browser.