files easier. Examples: substitute inputFile outputFile \ --replace "@bindir@" "$out/bin" \ --replace "@gcc@" "$GCC/bin/gcc" substitute inputFile outputFile --subst-var out (this is sugar for --replace "@out@" "$out") substituteInPlace file --replace a b (input and output are both `file'; the execute bit is preserved) svn path=/nixpkgs/trunk/; revision=2239
40 lines
853 B
Bash
40 lines
853 B
Bash
substitute() {
|
|
input=$1
|
|
output=$2
|
|
|
|
params=("$@")
|
|
|
|
sedArgs=()
|
|
|
|
for ((n = 2; n < ${#params[*]}; n += 1)); do
|
|
p=${params[$n]}
|
|
|
|
if test "$p" = "--replace"; then
|
|
pattern=${params[$((n + 1))]}
|
|
replacement=${params[$((n + 2))]}
|
|
n=$((n + 2))
|
|
sedArgs=("${sedArgs[@]}" "-e" "s^$pattern^$replacement^g")
|
|
fi
|
|
|
|
if test "$p" = "--subst-var"; then
|
|
varName=${params[$((n + 1))]}
|
|
n=$((n + 1))
|
|
sedArgs=("${sedArgs[@]}" "-e" "s^@${varName}@^${!varName}^g")
|
|
fi
|
|
|
|
done
|
|
|
|
sed "${sedArgs[@]}" < "$input" > "$output".tmp
|
|
if test -x "$output"; then
|
|
chmod +x "$output".tmp
|
|
fi
|
|
mv -f "$output".tmp "$output"
|
|
}
|
|
|
|
|
|
substituteInPlace() {
|
|
fileName="$1"
|
|
shift
|
|
substitute "$fileName" "$fileName" "$@"
|
|
}
|