J'ai un script bash myscript.sh
. Je veux dire d'appeler un autre script, commande ou builtin de l'intérieur, par exemple, diff
. Je veux dire passer des options à myscript.sh
, dont certaines seraient passées à diff
lors de l'appel.Passer les options reçues dans le script bash vers un script appelé, une commande ou une commande intégrée
La façon dont je mis en œuvre c'est en mettant en place une chaîne d'option optstring
via getopt
, puis en utilisant
eval "diff ${optstring} ${file} ${TRG_DIR}/${filebase2}"
Jusqu'à présent, cela a fonctionné, mais je ne sais pas si cela est sujette à des problèmes lors du passage des arguments avec des caractères génériques, etc. En tout cas, ...
Y a-t-il une meilleure façon de le faire?
La façon dont je mis en place
optstring
est
set -o errexit -o noclobber -o nounset -o pipefail
params="$(getopt -o qy --long brief,side-by-side,suppress-common-lines --name "$0" -- "[email protected]")"
if [ $? != 0 ] ; then echo "Failed parsing options." >&2 ; exit 1 ; fi
echo params=$params
echo [email protected]
eval set -- "$params"
optstring=""
# These variables are likely not needed
brief=false
sbs=false
scl=false
#while false ; do
while true ; do
case "$1" in
-q|--brief)
optstring=${optstring}" -q"
brief=true
echo "brief"
shift
;;
-y|--side-by-side)
optstring=${optstring}" -y"
sbs=true
echo "side-by-side"
shift
;;
--suppress-common-lines)
optstring=${optstring}" --suppress-common-lines"
scl=true
echo "suppress-common-lines"
shift
;;
--)
shift
break
;;
*)
echo "Not implemented: $1" >&2
exit 1
;;
esac
done
echo optstring=${optstring}
Je trouve que quand il n'y a pas d'options, je reçois l'erreur 'options [@]: variable' non lié. Comment puis-je m'en débarrasser? –
https://stackoverflow.com/questions/7577052/bash-empty-array-expansion-with-set-u résout le problème. –