Pourquoi utiliser bash -c Dans un superviseur au lieu d'un appel direct?

Je commence à utiliser

supervisord

Gérer les services sur mon serveur. Je ne suis pas un utilisateur professionnel Linux, Mais je peux faire face à cela assez bien et le gérer.

Juste de la curiosité, j'ai remarqué que la plupart des équipes dans supervisord Ressemble à ca:

[program:install]
command=bash -c "/src/etc/install.sh"

J'ai lu un homme Basha et sache que

-c

Vous devez utiliser pour insérer les variables transmises après la ligne.

Alors, quel est le point d'utilisation

bash -c

dans un superviseur (ou à tout autre endroit) au lieu d'un appel direct (Comme dans l'exemple ci-dessous), Considérant qu'aucune variables n'a été transférée / Utilisé?

[program:install]
command=/src/etc/install.sh

Remercier!
Invité:

Hannah

Confirmation de:

Les possibilités de la coquille, telles que l'expansion du nom du chemin (

*

,

?

), Listes de commandes (

;

,

&&

,

||

), Redirection (

<

,

>

,

|

,) Non implémenté par un superviseur, qui ne casse que l'équipe à un éventail de lignes d'arguments.

DANS

bash -c

Il ne peut s'agir que d'une aide pour un utilisateur novice qui peut avoir une tentation d'utiliser de telles fonctions dans l'équipe. Par exemple, il évite de surprendre que

command=echo foo > /tmp/bar

Les sorties

foo > /tmp/bar

Au lieu d'écrire

foo

à

/tmp/bar

.


-c

Il a peu en commun avec des variables. Tout argument supplémentaire pour bash Sera disponible uniquement comme arguments du script.

$0

,

$1

etc. Dans l'équipe, mais cette fonction est rarement utilisée. par exemple

bash -c 'echo $0 $0' foo

Les sorties

foo foo

.

Christine

Confirmation de:

Ceci est expliqué
http://supervisord.org/subproc ... nment
:

Aucun shell n'est effectué par un superviseur lorsqu'il lance le sous-processus, de sorte que les variables d'environnement tels que USER, PATH, HOME, SHELL, LOGNAME Les deux, etc., ne changent pas par rapport à leurs valeurs par défaut ou de réaffectées autrement. Ceci est particulièrement important à noter lorsque vous exécutez un programme d'un superviseur exécutant au nom de root, Avec section user = en configuration.

Pour contourner ce problème

bash -c

Peut être utilisé.

Pour répondre aux questions, connectez-vous ou registre