Récupérer la valeur d'une variable d'un sous-shell

Fermé
gnugo - Modifié par gnugo le 3/10/2012 à 11:10
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 3 oct. 2012 à 12:32
Rebonjour,

Suite à ma question de tout à l'heure (faire un traitement sur STDERR seul dans un pipe), je voudrais savoir s'il est possible de récupérer la valeur d'une variable d'un sous-shell ?


exemple :
ls | a=texte
echo $a
=> Rien (au lieu de "texte")

Il me faudrait récupérer dans mon shell courant la variable $a, par n'importe quel moyen mais sans passer par un fichier temporaire, et sans utiliser STDIN ou STDERR qui sont déjà utilisés .

Ou encore en reprenant l'excellent exemple de dubcek:
$ (echo aaa ; echo bbb>&2 ; echo ccc) 2> >(sed 's/^/stderr: /' >&2) | sed 's/^/stdout: /'
stdout: aaa
stdout: ccc
stderr: bbb


=> Ça devient compliqué: en plus de modifier STDERR, j'ai besoin d'en récupérer une partie modifiée dans mon shell courant.
Pour simplifier, disons que je cherche à récupérer le résultat de "sed 's/^/stderr: /'" dans mon shell courant (dans une variable par exemple) pour le réutiliser ensuite.


Y a t-il un moyen de faire cela?
Ouvrir un 3eme flux et l'enregistrer dans une variable? Mais ça semple compliqué dans un sous shell qui est lui même dans un pipe
A voir également:

1 réponse

dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
3 oct. 2012 à 11:11
hello
en regroupant les commandes dans le meme sous-shell avec des ()
$ ls | (a=b
> echo $a )
b
$ 
0
Le but c'est justement de ne pas les regrouper dans le même sous-shell.
C'est de récupérer le résultat d'un sous shell dans le shell courant.

Un peu comme quand on fait a=$(echo b)

Sauf que à ce sous-shell, je dois en plus lui passer quelquechose sur son entrée standard, et faire un traitement à part pour son STDOUT. Ce que je souhaite récupérer c'est son STDERR pour le traiter dans mon shell courant et le garder dans une variable utilisée par la suite.
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 3/10/2012 à 12:31
ce n'est pas possible de passer une variable d'un sous-shell au shell appellant.
on peut mettre plusieurs commandes dans $()
a=$(echo b ; echo c ; ls)
montre un exemple de ce que tu veux faire
0
Et si je m'arrange pour passer par le pipe l'adresse d'un fd que j'aurais ouvert en écoute dans le bash principal ?
Ce serait envisageable de faire quelque chose comme ça ?
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
3 oct. 2012 à 12:32
oui
0