blob: 5e40e9b8aece11961907513153502a8d6ea8a686 (
plain) (
tree)
|
|
# Prepend arguments from a file to the given arguments for a command
self=apf
# Require at least two arguments
if [ "$#" -lt 2 ] ; then
printf >&2 '%s: Need an arguments file and a command\n' "$self"
exit 2
fi
# First argument is the file containing the null-delimited arguments
argf=$1 cmd=$2
shift 2
# If there were arguments given on the command line, we need to be careful and
# prepend our ones first
if [ "$#" -gt 0 ] ; then
# Iterate through any remaining arguments
for carg ; do
# If this is the first command argument, then before we add it, we'll
# add all the ones from the file first if it exists
if [ -n "$argf" ] ; then
# Reset the positional parameters
set --
# Put our file arguments in first before we continue with the loop
if [ -e "$argf" ] ; then
while IFS= read -r farg ; do
case $farg in
'#'*) continue ;;
*[![:space:]]*) ;;
*) continue ;;
esac
set -- "$@" "$farg"
done < "$argf"
fi
# Unset the argfile so we don't repeat this bit
unset -v argf
fi
# Stack the original invocation argument back onto the positional
# parameters
set -- "$@" "$carg"
done
# If there weren't, we can just read the file and slap them in
elif [ -e "$argf" ] ; then
while IFS= read -r farg ; do
case $farg in
'#'*) continue ;;
*[![:space:]]*) ;;
*) continue ;;
esac
set -- "$@" "$farg"
done < "$argf"
fi
# Run the command with the changed arguments
exec "$cmd" "$@"
|