Pass variable from a child to parent in KSH

后端 未结 2 905
独厮守ぢ
独厮守ぢ 2020-12-22 08:53

I have to work with KSH (yeah that hell shell). I need to use a fork, a subroutine as following:

    #!/bin/ksh

    PIPE=PIPE_$$
    PIPE_ERR=PIPE_ERR_$$

          


        
相关标签:
2条回答
  • 2020-12-22 09:25

    Variables can be passed from a parent shell to child shell, not the other way around. However, you can do a workaround if you are really in need of the value set in the child shell.

    One possible workaround: In the child shell, write the env variables of your interest along with their values to a file. Once you are back in the parent shell, run this file so that the env variables needed are overwritten with what is set in the file. You can refer here for an example.

    0 讨论(0)
  • 2020-12-22 09:26

    A shell variable is just a piece of memory inside the running shell process. An Environment Variable is a variable that the shell copies into its environment prior to calling another program.

    To understand the limitations of Environment Variables, one must understand the concept of the environment of a process: It's a single section of memory that is not shared between processes, but passed on from one process to another during an exec system call. (See also: Environment Variables)

    The environment gets passed on from one process to the next, and subsequent processes can change it prior to calling another program.

    This environment also has certain restrictions: It can consist only of a list of nul-terminated strings, terminated by a null-pointer. Essentially, it's an array of strings.

    Note that these strings do not need to follow the VARNAME=value structure, which is a convention adopted by early unix shells.

    ksh93 does support shell co-processes, though.

    After starting a child process, the parent can connect to the child's stdin and stdout with the <& p and >& p redirection operators. It can be a challenge to handle these correctly, as many operations close their stdout on termination, which will close the pipe to the child.

    0 讨论(0)
提交回复
热议问题