从 BASH 页面:
当脚本使用 source运行时,它在现有的 shell中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本只是作为文件名运行,那么将生成一个单独的子shell(具有一组完全独立的变量)来运行脚本。
但是如果我跑步会发生什么
. myscript &
在这种情况下它是否作为子外壳运行?. myscript &
和有什么区别./myscript &
?
从 BASH 页面:
当脚本使用 source运行时,它在现有的 shell中运行,脚本创建或修改的任何变量在脚本完成后仍然可用。相反,如果脚本只是作为文件名运行,那么将生成一个单独的子shell(具有一组完全独立的变量)来运行脚本。
但是如果我跑步会发生什么
. myscript &
在这种情况下它是否作为子外壳运行?. myscript &
和有什么区别./myscript &
?
是的 - 你可以很容易地测试这个:
源文件:
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
如果在execute文件中使用&
,. source
执行顺序不同,进程关联的PID也不同,可以看到MYVAR
源文件中设置的变量没有打印出来:
Exec PID - 34931
done
Source File
Source PID - 34932