我所知道的是,当我有两个脚本文件时,可以说a.sh
和b.sh
并使用脚本a.sh
中定义的变量或函数,然后. ./a.sh
正常工作但是./a.sh
不起作用。运行shell脚本时,./script.sh
和. ./script.sh
都可以正常运行。使用./script.sh
和. ./script.sh
运行脚本有什么区别?
答案 0 :(得分:8)
. path/to/script
来源文件(在同一个shell中执行)。另一个调用会执行一个执行脚本的新shell进程。
在子进程中调用脚本将使其变量对父进程不可用。采购脚本将在同一父流程中引入和更改变量。
答案 1 :(得分:4)
符号. ./a.sh
是source ./a.sh
的缩写。 source
是执行shell的内置命令,用于逐行读取给定文件并执行所有写入的操作,就像它直接在shell中键入一样。因此,如果exit
中有一个a.sh
语句,它将关闭发出此信息的shell;通常,xterm窗口会关闭。
然而,符号./a.sh
开始了一个新过程;这是由当前shell fork
自己完成的,然后使分叉的子exec
完成给定的程序。在这种情况下,这又是一个shell脚本,因此新的shell将是exec
。这个新shell所做的一切都不会影响原始(父)shell。如果孩子没有被送到后台,则父母会等待孩子终止。