2017-09-08 8 views
0

Un script bash prend ses arguments à un autre scénario, qui est un script python dans mon cas:scripts Bash: Évitez les arguments de chaîne vide

python test.py "$1" "$2" "$3" 

Le script Python utilise la bibliothèque argparse et retournera avec un erreur, si des arguments de chaîne vides sont présents, c'est-à-dire que le script parent a été appelé avec moins de 3 paramètres. La raison pour laquelle j'utilise un script python dans l'exemple est parce qu'il ne serait probablement pas reconnu dans un script shell subsidiaire, si des arguments -valeurs non-utilisés "chaîne vide" sont présents.

Une façon de contourner l'erreur, est de vérifier le nombre d'arguments $# et gérer explicitement chaque cas viable:

if [ $# -eq 0 ] 
then 
    python test.py 
elif [ $# -eq 1 ] 
then 
    python test.py "$1" 
elif [ $# -eq 2 ] 
then 
    python test.py "$1" "$2" 
else 
    python test.py "$1" "$2" "$3" 
fi 

Notez que je dois citer les arguments, car ils peuvent contenir des espaces. Quelles sont les alternatives à cette solution (gonflée)?

La solution ne doit pas dépendre de la transmission de la liste d'arguments dans son ensemble. Il peut être souhaitable de changer l'ordre des arguments ou d'ajouter d'autres variables locales en tant qu'arguments au script python.

Répondre

1

"[email protected]" par rien s'il n'y a pas d'arguments, vous pouvez simplement utiliser

python test.py "[email protected]" 

Si vous voulez vous assurer un 4ème argument de votre script (ou plus) n'est pas passé au script Python , utilisez l'extension bash

python test.py "${@:1:3}"