shell中的exec命令说明

经常看到一些shell脚本中用到exec,且每次都要花时间去理解,索性将典型的应用列出来,方便理解

首先讲下exec,这个命令在linux里面也有,主要是创建进程且exec之后的代码将不会执行,只会执行exec执行的进程,例如exec ls,则只会执行ls命令,而exec后面的代码不再执行

但是shell里面一般不是这么用的,很多时候都是用来重定向文件描述符,这种情况下不会重新创建进行,而是会继续执行后面的代码

经典用法

CT_LogEnable() {
    local clean=no
    local arg
    for arg in "$@"; do eval "$arg"; done
    exec 6>&1 7>&2 8<&0 --1

    CT_BUILD_LOG="${CT_TOP_DIR}/build.log"
    CT_LOG_ENABLED=y
        if [ "$clean" = "yes" ]; then
        rm -f "${CT_BUILD_LOG}"
    fi
    exec >>"${CT_BUILD_LOG}" --2
}

我们以上面一段代码为例,进行说明

其中第1个exec主要是将标准输入(0)复制到文件描述符8,标准输出(1)复制到文件描述符7,标准错误(2)复制到文件描述符6,这样后面只要执行echo "test" > &7(注意>和&之间一定不能有空格),就是输出到终端。执行完成后会继续往下执行(上文已经提过)

第2个exec主要是将标准输出重定向一个文件中(追加的形式),也就是将exec后面的所有echo的信息直接输出文件里面

整理了常见的重定向命令如下:

exec > filename                   将标准输出重定向一个文件

exec >> filename                    将标准输出重定向一个文件中(追加)
exec 1 > fielname                      将标准输出重定向一个文件
exec > filename 2>&1                将标准输出和标准错误一起重定向一个文件
exec 2 > filename                       将标准错误重定向一个文件
exec 2 >> filename                     将标准输出重定向一个文件中(追加)
exec >> filename 2>&1               将标准输出和标准错误一起重定向一个文件中(追加)
exec < filename >filename2        将command命令以filename文件作为标准输入,以filename2文件作为标准输出
exec < filename                         将command命令以filename文件作为标准输入
exec << delimiter                       将从标准输入中读入,直至遇到delimiter分界符
exec <&m                                  将文件描述符m作为标准输入
exec >&m                                  将标准输出重定向文件描述符m中
exec &m<&-                              关闭文件描述符m

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...