La diferencia entre los tres métodos de ejecución de scripts de shell: (sh, exec, source)
Cuando se utiliza $ sh script.sh para ejecutar un script, el shell actual es el proceso principal, se genera un proceso de subshell y el script se ejecuta en el subshell. Una vez ejecutado el script, salga del subshell y regrese al shell actual.
./script.sh es equivalente a sh script.sh.
Utilice el método $ source script.sh para ejecutar el script en el contexto actual y no se generará ningún proceso nuevo. Una vez ejecutado el script, regrese al shell actual.
El método fuente también se llama comando punto.
.script.sh es equivalente al código fuente script.sh.
El uso del método de comando exec reemplazará el proceso de shell actual con el proceso de comando y mantendrá el PID sin cambios. Después de la ejecución, salga directamente sin volver al entorno de shell anterior.
2. Verificación de prueba
vi loop.sh
Mostrar el proceso actual
Método sh: ejecute loop.sh para imprimir el proceso de ejecución
Modo fuente: Ejecutar loop.sh para imprimir el proceso de ejecución
Modo ejecutivo: Ejecutar loop.sh para imprimir el proceso de ejecución
Presione ctrl+ Modo C
sh: el proceso principal es 6770 y el proceso secundario al ejecutar loop.sh es 13736. Después de la ejecución, regrese al shell del proceso principal.
Modo fuente: tanto el proceso padre como el proceso hijo son 6770 (no hay ningún proceso nuevo durante la ejecución, después de la ejecución, volverá al shell del proceso padre).
Modo ejecutivo: el PID del proceso permanece en 6770 sin cambiar y se sale directamente del shell cuando se completa la ejecución (ctrl+C para forzar el cierre). Cuando se ejecuta el script, se reemplaza el shell del proceso principal. Después de la ejecución, sale directamente sin regresar al shell anterior.