从BASH页面:
使用源运行脚本时,它在现有shell中运行, 脚本创建或修改的任何变量都将保持可用 脚本完成后。相反,如果脚本运行就像 文件名,然后是一个单独的子shell(具有完全独立的一组) 将产生变量)来运行脚本。
但是如果我跑
会发生什么. myscript &
在这种情况下,它是作为子shell运行的吗? . myscript &
和./myscript &
之间的区别是什么?
答案 0 :(得分:3)
是的 - 你可以轻松测试一下:
源文件:
echo "Source File"
echo "Source PID - $BASHPID"
MYVAR=someval
执行文件:
. source
echo "Exec PID -$BASHPID"
echo $MYVAR
echo done
输出:
Source File
Source PID - 34893
Exec PID - 34893
someval
done
如果您在执行文件的&
中使用. source
,则执行顺序不同,与该过程关联的PID也是如此,您可以看到MYVAR
源文件中的变量集不会打印:
Exec PID - 34931
done
Source File
Source PID - 34932