59 lines
1.2 KiB
Bash
Executable File
59 lines
1.2 KiB
Bash
Executable File
#!/bin/sh
|
|
set -f
|
|
|
|
src='-' dst='-'
|
|
case $# in
|
|
0 ) ;;
|
|
1 )
|
|
src="$1"
|
|
case "$1" in
|
|
*.in ) dst="${1%".in"}" ;;
|
|
esac
|
|
;;
|
|
2 ) src="$1" ; dst="$2" ;;
|
|
* ) exit 1 ;;
|
|
esac
|
|
[ -n "${src}" ] || exit 1
|
|
[ -n "${dst}" ] || exit 1
|
|
if [ "${src}" = '-' ] ; then src=/dev/stdin ; fi
|
|
if [ "${dst}" = '-' ] ; then dst=/dev/stdout ; fi
|
|
|
|
is_same_file() {
|
|
find -L "$1" -samefile "$2" -printf . -quit 2>/dev/null | grep -Fq . || return 1
|
|
}
|
|
|
|
if is_same_file "${src}" /dev/stdin ; then src=/dev/stdin ; fi
|
|
if is_same_file "${dst}" /dev/stdout ; then dst=/dev/stdout ; fi
|
|
|
|
while : ; do
|
|
if [ "${src}" = '/dev/stdin' ] && [ "${dst}" = '/dev/stdout' ] ; then
|
|
break
|
|
fi
|
|
|
|
if is_same_file "${src}" "${dst}" ; then
|
|
exit 1
|
|
fi
|
|
break ; done
|
|
|
|
set +e ; unset __ret
|
|
while [ -n "${ENVSUBST_ARGS}" ] ; do
|
|
[ -f "${ENVSUBST_ARGS}" ] || break
|
|
[ -s "${ENVSUBST_ARGS}" ] || break
|
|
|
|
envsubst "$(cat "${ENVSUBST_ARGS}" </dev/null)" < "${src}" > "${dst}"
|
|
__ret=$?
|
|
break ; done
|
|
if [ -z "${__ret}" ] ; then
|
|
envsubst "$(envsubst-args.sh </dev/null)" < "${src}" > "${dst}"
|
|
__ret=$?
|
|
fi
|
|
|
|
while : ; do
|
|
[ "${ENVSUBST_UNLINK_SRC}" = 1 ] || break
|
|
[ "${src}" != '/dev/stdin' ] || break
|
|
|
|
rm -f "${src}"
|
|
break ; done
|
|
|
|
exit ${__ret}
|