Linux——exec命令的使用


整体说明

  • Linux Shell 脚本中,exec 命令用于在当前 shell 进程中执行指定的命令,而不是启动一个新的子进程

  • exec 常常用来替换当前 shell 进程,或者重定向文件描述符

  • exec 基本语法如下:

    1
    exec 命令 [参数...]
    • 执行后,当前 shell 进程会被新命令替换,原 shell 脚本后续的内容将不会再执行

exec 替换进程用法

  • 假如在脚本中写:

    1
    2
    3
    4
    #!/bin/bash
    echo "Before exec"
    exec ls -l
    echo "After exec"
    • 输出只会有 “Before exec” 和 ls -l 的结果,而不会有 “After exec”,因为 exec ls -l 之后,脚本所在的 shell 进程已经被 ls 取代,后续语句不会执行

exec 实现文件描述符重定向

  • exec 也常用于重定向输入输出,不会启动新进程,而是改变当前 shell 的文件描述符。例如:

    • 将标准输出重定向到文件:

      1
      2
      exec > output.txt
      echo "This will go to output.txt"
      • 这样,后续所有标准输出都会写入 output.txt 文件
    • 将标准输入重定向为某个文件:

      1
      2
      3
      exec < 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