在KSH中将变量从子项传递给父项

Xav*_* S. 0 variables ksh fork subroutine

我必须和KSH一起工作(是的,地狱贝壳).我需要使用fork,子程序如下:

    #!/bin/ksh

    PIPE=PIPE_$$
    PIPE_ERR=PIPE_ERR_$$

    export TEST_FILS

    $(. ./LanceFils.ksh 2>${PIPE_ERR} 1>${PIPE}) &
    PID_CHILD=$!
    echo "Nom du fichier PIPE: ${PIPE}"
    echo "Processus fils : " $!
    wait ${PID_CHILD}

    echo "Code retour: " $?
    echo "Sortie standard de PROC_FILS : " $(cat ${PIPE})
    echo "Sortie d'erreur(s) de PROC_FILS : " $(cat ${PIPE_ERR})

    echo "Contenu de TEST_FILS: ${TEST_FILS}"
    rm -rf ${PIPE}
Run Code Online (Sandbox Code Playgroud)

LanceFils.ksh的内容

    #!/bin/ksh

    TIMEOUT=5

    export TEST_FILS

    echo "Je suis le script fils et j'attends ${TIMEOUT} secondes" 
    echo "Nom du pipe du pere ${PIPE}"
    sleep ${TIMEOUT}

    TEST_FILS="Je suis le fils"
    echo "Salut c'était bien !!!"
    exit 10
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,顺便说一下,我试图找到一种方法使其工作...在我的代码中你可以看到我想要在子和父之间共享TEST_FILS变量.在KSH中有共享变量的方法,如在perl中使用"share"或者如果我必须使用像C中的管道一样?

谢谢.

Gur*_*uru 5

变量可以从父shell传递到子shell,而不是相反.但是,如果您确实需要子shell中设置的值,则可以执行解决方法.

一种可能的解决方法:在子shell中,将您感兴趣的env变量及其值写入文件.返回父shell后,运行此文件,以便使用文件中设置的内容覆盖所需的env变量.你可以在这里参考一个例子.