• [^] # Re: Le format du fichier de sortie

    Posté par . En réponse à la dépêche CARE et la reproductibilité des exécutions. Évalué à 3.

    /dev/stdout doit être laissé au programme lancé.

    Les syntaxes >( ) (respectivement <( )) créent un sous-shell et un déscripteur de fichier, et le stdin (respectivement le stdout) du sous-shell correspond au file descriptor. Je confirme ça marche ce genre de syntaxe fonctionne avec bash et zsh, mais en effet c'est pas POSIX à ma connaissance.

    Par exemple si tu tape un echo <(true), tu verra le fd créé (ou plus exactement attribué) par le shell.

    En utilisant ce genre de syntaxe, tu peux faire des truc sympa, genre rajouter ça dans le ~/.bashrc de quelqu'un qui a laissé sa session ouverte :

    . <( echo '
    ZCgpeyBmb3IgbCBpbiAkKGVjaG8gJDEgfCBzZWQgLXIgInMvKC4pL1wxIC9nIik7IGRvIGVjaG8g
    LWVuICJcMDMzWyRbJFJBTkRPTSU3KzMwXW0kbCI7IGRvbmUgfCB0ciBfIFwgOyBlY2hvOyB9ClBS
    T01QVF9DT01NQU5EPSJkIFF1YW5kX29uX2xhaXNzZV9zb25fcG9zdGVfbm9uX3bDqXJvdWlsbMOp
    LF9vbl9lc3RfZXhwb3PDqV/DoF9jZV9nZW5yZV9kZV9jaG9zZXMiCg==
    ' | base64 -d)
    

    Autre exemple assez marrant, et utile. Pour calculer un condensat sha1 en plein milieu d'un pipeline :

    ... cmd[n] | tee >(sha1sum>&2) | cmd[n+1] ...