无法理解bash脚本中的组合exec和重定向

时间:2016-07-28 08:35:49

标签: bash shell

我知道exec是用于在here

引用的当前流程中执行程序
  

exec替换当前进程中的当前程序,没有   分叉一个新的过程。这不是你会在每一个中使用的东西   你写的剧本,但它偶尔会派上用场。

我正在查看一个bash脚本,其中一行我无法理解。

#!/bin/bash
LOG="log.txt"
exec &> >(tee -a "$LOG")
echo Logging output to "$LOG"

这里,exec没有任何程序名要运行。这是什么意思?它似乎是将执行输出捕获到日志文件。我会理解它是exec program |& tee log.txt但是在这里,我无法理解exec &> >(tee -a log.txt)。为什么>之后的另一个&>? 这条线的意义是什么? (我知道 - 一个选项是附加的,&>用于重定向,包括stderr)

编辑:在我选择解决方案后,我发现exec &> >(tee -a "$LOG")在bash shell(不是sh)时有效。所以我将初始#!/bin/sh修改为#!/bin/bash。但exec &>> "$LOG"适用于bash和sh。

1 个答案:

答案 0 :(得分:3)

来自if any(mode in s for s in "encrypt" 'e' 'decrypt' 'd'.split()): or you can store

  

exec [-cl] [-a name] [command [arguments]]

     

如果未指定命令,则任何重定向都会在   当前的shell,[...]

其余的:

man bash

请参阅process substitution