我知道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。
答案 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