学习Unix环境编程所遇到的问题2: 到底是如何执行一个脚本文件的?

当shell执行一个命令的时候,它会fork一个子shell来通过execute来执行命令。

那么,当我们执行一个文件时,里面包含了多条命令,和一些其他文件的时候。当我们遇到一个文件的时候,它还是会fork一个新的shell
来执行里面的命令么?

shell中的$((command))会fork一个新的shell来执行里面的命令么?

bash不是开源的吗?

首先明白原理
后台执行UNIX/Linux命令和脚本的五种方法

  1. 使用&符号在后台执行命令
    你可以在Linux命令或者脚本后面增加&符号,从而使命令或脚本在后台执行,例如:.

$ ./my-shell-script.sh

  1. 使用nohup在后台执行命令
    使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令,如下所示:

$ nohup ./my-shell-script.sh

  1. 使用screen执行命令
    通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen命令。.

Linux的screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。

  1. 使用at将一个命令作为批处理执行
    使用at命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点在后台执行备份脚本,执行下面的命令:

$ at -f backup.sh 10 am tomorrow

在批处理模式下执行某些任务需要启用一些选项。

  1. 使用watch连续地执行一个命令

要想按一个固定的间隔不停地执行一个命令,可以使用watch命令,如下所示:

$ watch df -h

你要区分或者说界定你所谓的“命令”的内涵或边界。
如果你所谓的"命令" 是指普通环境中的应用程序对应的命令,则无论在shell环境中,还是一个特定的程序中,一般对这样程序的执行都是需要新开进程的。
如果你所谓的"命令"是指特定程序中的功能模块,则不一定,要看程序对这些功能的实现具体情况,开进程、开线程或者直接在主程序中执行都是可能的。