blob: 99fe884a69c48f3dcf944344243165ed49413148 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
|
#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
without-env ENVVAR PATH COMMAND...
without-env -h
EOF
}
help() {
cat <<-'EOF'
Options:
-h, --help show this message
ENVVAR the name of the environment variable to be modifed
PATH section to be excluded from ENVVAR
COMMAND command to be wrapped
Execute COMMAND, but changing the variable ENVVAR by excluding
PATH from it.
Examples:
Execute "command -V" filtering ~/bin, to get where "w3m" is
in $PATH, other than ~/bin:
$ without-env PATH ~/bin -- command -v w3m
Compile foo.c, excluding ~/.local/include
from $C_INCLUDE_PATH:
$ without-env C_INCLUDE_PATH ~/.local/include -- cc -co foo.o foo.c
EOF
}
for flag in "$@"; do
case "$flag" in
(--)
break
;;
(--help)
usage
help
exit
;;
(*)
;;
esac
done
while getopts 'h' flag; do
case "$flag" in
(h)
usage
help
exit
;;
(*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
eval "$(assert-arg -- "${1:-}" 'ENVVAR')"
eval "$(assert-arg -- "${2:-}" 'PATH')"
eval "export $1=\"\$(echo \"\$$1\" | sed \"s|\$2||g\")\""
shift # drop $1
shift # drop $2
if [ "${1:-}" = '--' ]; then
shift # drop --
fi
"$@"
|