整体说明
Linux Shell 脚本中,exec 命令用于在当前 shell 进程中执行指定的命令,而不是启动一个新的子进程
exec 常常用来替换当前 shell 进程,或者重定向文件描述符
exec 基本语法如下:
1
exec 命令 [参数...]
- 执行后,当前 shell 进程会被新命令替换,原 shell 脚本后续的内容将不会再执行
exec 替换进程用法
假如在脚本中写:
1
2
3
4
echo "Before exec"
exec ls -l
echo "After exec"- 输出只会有 “Before exec” 和 ls -l 的结果,而不会有 “After exec”,因为 exec ls -l 之后,脚本所在的 shell 进程已经被 ls 取代,后续语句不会执行
exec 实现文件描述符重定向
exec 也常用于重定向输入输出,不会启动新进程,而是改变当前 shell 的文件描述符。例如:
将标准输出重定向到文件:
1
2exec > output.txt
echo "This will go to output.txt"- 这样,后续所有标准输出都会写入 output.txt 文件
将标准输入重定向为某个文件:
1
2
3exec < input.txt
read line
echo $line- 这样,read 命令会从 input.txt 读取内容
关闭文件描述符:
1
2
3
4
5
6
7
8
9# 打开一个文件用于读取,赋予文件描述符3
exec 3< myfile.txt
# 通过文件描述符3读取一行
read line <&3
echo "读取到的内容: $line"
# 关闭文件描述符3
exec 3<&-- 这表示关闭文件描述符 3