2015-09-30 1 views
0

Pourquoi "nohup sh -c" stocke-t-il des variables?Pourquoi nohup sh -c "..." stocke-t-il une variable?

$ nohup sh -c "RU=ru" & 
[1] 17042 
[1]+ Done     nohup sh -c "RU=ru" 
$ echo ${RU} 

$ RU=ru 
$ echo ${RU} 
ru 

Comment puis-je faire de telle sorte qu'il stocke la valeur de la variable afin que je puisse utiliser dans une boucle plus tard?

Pour l'instant, ce n'est pas enregistrer la valeur quand je l'utilise à la place RU=ru ma boucle bash, à savoir

nohup sh -c "RU=ru; for file in *.${RU}-en.${RU}; do some_command ${RU}.txt; done" & 

Il ne fonctionne pas dans le sh -c "..." aussi, chat nohup.out sorties rien pour le echo:

$ nohup sh -c "FR=fr; echo ${FR}" & 
[1] 17999 
[1]+ Done     nohup sh -c "FR=fr; echo ${FR}" 
$ cat nohup.out 
+2

'sh -c 'commence un nouveau processus; il n'y a aucun moyen pour qu'un ensemble de variables de ce processus soit disponible pour le shell qui exécute 'sh -c'. Cela n'a rien à voir avec 'nohup'. – chepner

+0

Est-ce que cela signifie que je dois coder en dur partout dans le script lorsque j'utilise cette variable? Cela ne fonctionne pas dans le 'sh -c" ... "' aussi = ( – alvas

+0

Cherchez-vous la commande 'export'? 'Export RU = ru' rendra' RU' disponible dans tout processus démarré par le courant shell. ('RU = ru' serait disponible dans le shell lui-même, mais pas pour les enfants.) – chepner

Répondre

2

Pourquoi variable ne stocke "nohup sh -c"?

Les variables d'environnement ne résident que dans un processus et sont potentiellement les enfants d'un processus. Lorsque vous exécutez sh -c, vous créez un nouveau processus enfant. Les variables d'environnement de ce processus enfant ne peuvent pas être déplacées vers le processus parent. C'est ainsi que fonctionnent les coquilles et les variables d'environnement.

Il ne fonctionne pas dans le sh -c « ... » aussi, sorties cat nohup.out rien pour l'écho »

La raison est que vous utilisez deux cite Lorsque vous utilisez des guillemets doubles, la coquille ne l'extension de variable avant d'exécuter la commande Si vous passez à des guillemets simples, la variable ne sera pas étendu jusqu'à ce que la commande shell fonctionne:..

nohup sh -c 'FR=fr; echo ${FR}'