Exemple 1 P> $$ code> donne un identifiant de processus du processus de script lorsqu'il est utilisé dans un script, comme celui-ci: $ ( ps -o cmd,pid,ppid ; echo $$ )
CMD PID PPID
bash 15073 4657
bash 15340 15073
ps -o cmd,pid,ppid 15341 15340
15073
4 Réponses :
Le remplacement a lieu dans la coque mère; Le sous-groupe n'a pas été démarré au moment où la substitution a lieu. p>
Pouvez-vous s'il vous plaît être peu plus descriptif s'il vous plaît? Je ne suis pas capable de suivre ce que vous dites. Merci!
@ABC: Parce que vos sous-espaces ne vèverent jamais de $$. Il a été invoqué avec (echo 1234) code> lorsque votre coquille de parent substitue déjà l'argent avec son PID. Vous devez vous échapper, alors le sous-(-shell peut voir l'argent.
@flolo Comment puis-je échapper. Pouvez-vous s'il vous plaît donner le code? J'ai essayé \ $$, $ \ $. Cela n'a rien fait.
Je ne pense pas que vous puissiez vous échapper. Vous pouvez utiliser Bashpid code> comme mentionné ci-dessus ou plus portable SH -C 'echo $ ppid' code>.
Oui, cela ne concerne pas qui fait le remplacement; $$ est i> évalué dans le sous-vase, il est juste d'évaluer intentionnellement au PID de la coque principale comme indique le manuel de Manpage.
du manuel Bash:
$ Expands to the process ID of the shell. In a () subshell, it
expands to the process ID of the current shell, not the sub-
shell.
Maintenant, comment puis-je obtenir la valeur de $$ dans le sous-vase, de sorte que je reçois le PID du sous-groupe?
Voir Stackoverflow.com/Questtions/7994762/...
J'ai essayé et m'échapper (pour passer l'argent au sous-groupe) ne fonctionne pas car le sous-shell hérite de la valeur $ de la valeur de la parente bash. La solution à cela est d'utiliser $ Bashpid.
(echo $$; echo $BASHPID)
Un moyen plus portable, Linux uniquement, mais également compatible avec Dash:
Ça me manquait parce que $ Bashpid code> est seulement pour Bash! sh -c 'echo $$; echo $$ & dormance 5 & dormir 1 & dormance 1; echo $!' code> Je veux que le deuxième numéro soit égal à la troisième, et $ Bashpid code> est vide, Donc: SH -C 'Echo $$; Lisez A _ proc / auto / statiste & statiste && echo $ A && Dormez 5 & Sleep 1; echo $!' code> fonctionne, merci!