以下Bash命令有何功能?
exec {logout}> >(tee -a "${LOGFILE}")
或
exec {logout}>> "${LOGFILE}"
答案 0 :(得分:2)
来自关于redirections的Bash参考:
可以在文件描述符号之前的每个重定向可以改为在
{varname}
形式的单词之后。在这种情况下,对于除>&-
和<&-
之外的每个重定向运算符,shell将分配大于10的文件描述符并将其分配给{varname}
。
案件
exec {logout}> >(tee -a "${LOGFILE}")
Bash将打开一个新的文件描述符,将相应的整数分配给变量logout
,并将此文件描述符链接到进程替换
tee -a "${LOGFILE}"
输入此命令后,您可以检查变量logout
是否已分配给整数。然后,每次将流重定向到文件描述符$logout
时,它都会被送到tee
:
#!/bin/bash
logfile=testlogfile
exec {logout}> >(tee -a "$logfile")
echo "logout=$logout"
# now output some stuff to fd $logout:
echo >&"$logout" "Hello file descriptor $logout"
# it will send the message to tee, so that you'll see it on stdout
# and will also be appended to $logfile
# Check that output really got to $logfile:
cat "$logfile"
$logout
的输出只会附加到$logfile
(并且不会传递给tee
,所以你赢了&#39;在stdout看到它。在此之后,您真的不需要关闭文件描述符,它将在脚本(或会话)结束时自动关闭;但如果你真的想要关闭它:
exec {logout}>&-
您可以检查使用
打开的文件描述符ls /dev/fd