代码之家  ›  专栏  ›  技术社区  ›  codeforester

为什么交互式shell的子shell作为交互式shell运行?

  •  1
  • codeforester  · 技术社区  · 6 年前

    (echo $$ $BASHPID $-)
    

    我得到了

    22108 25602 himBH
    

    所以,我的子shell作为一个交互式shell运行。

    如果我尝试在后台运行相同的命令

    (echo $$ $BASHPID $-) &
    

    1 回复  |  直到 6 年前
        1
  •  5
  •   cdarke    6 年前

    父级的所有特征,包括设置。这是子shell定义的一部分。不管它是在前台还是后台运行,都没有区别——作业可以很容易地在前台和后台之间交换。

    非子shell将不会是交互式的。例如,如果我把

    (echo $$ $BASHPID $-)
    

    gash.sh 从非交互式shell调用:

    $ bash gash.sh
    73879 73880 hB
    

    但是,如果我源文件,那么它是一个交互式shell的子shell:

    $ . ./gash.sh
    1130 himBH