2010-02-10 2 views
4

Quelle est la meilleure pratique lors de l'exécution d'utilitaires externes dans des scripts shell. Par exemple, si je veux exécuter 'gzip' dans plusieurs scripts en m'assurant qu'un binaire gzip spécifique est utilisé, est-ce que je dois faire le chemin complet vers la variable binaire et utiliser simplement la variable dans le script?Chemins de commande en tant que variables dans les scripts shell

GZIP=/home/me/bin/gzip 
$GZIP somefile 
$GZIP anotherfile 

Ou est-il préférable pratique de coder en dur le chemin pour chaque appel vers le binaire?

/home/me/bin/gzip somefile 
/home/me/bin/gzip anotherfile 

Ou est-il préférable de définir et de compter sur le chemin? Je ne suis pas en train d'exécuter les scripts en tant que root, donc la maintenabilité, et la portabilité est plus importante que la sécurité de l'utilisateur.

Répondre

2

Je pense que la première option est la meilleure. Vous le trouverez ou similaire:

SOMEPATH=/path/to/somewhere 
EXEC_ONE=exec_foo 
EXEC_TWO=exec_bar 

$SOMEPATH/$EXEC_ONE --argument baz_file 

dans de nombreux scripts système.

Vous pouvez utiliser des conditions pour tester l'existence et même la compatibilité, les options disponibles, etc., et définir les variables en conséquence.

+0

La bonne chose ici est le dernier point sur les conditions: Selon le système sur lequel votre script s'exécute, vous pouvez choisir un autre exécutable à utiliser. –

2

Je pense que le dernier est le meilleur. Si vous ne l'exportez pas, le changement PATH ne sera pas visible pour les programmes de vos appels de script, et vous ne voulez probablement pas qu'il soit visible.

+1

Même si vous l'exportez *, il n'effectuera les processus fils que si l'utilisateur 'source' est le script plutôt que de l'exécuter. – dmckee

Questions connexes