gpt4 book ai didi

bash - @<(cat <<- EOF 在 Bash 中做了什么?

转载 作者:行者123 更新时间:2023-12-04 02:35:03 31 4
gpt4 key购买 nike

我在 Bash 脚本中偶然发现了一些奇怪的 heredoc 用法。一个简化的例子是这样的:

do_stuff() {
notify @<(cat <<- EOF
{
"key": "value",
<more JSON data>
}
EOF
)
}

@<(cat <<- EOF 是什么意思?部分做什么?它与普通的heredoc有什么不同?

最佳答案

<(...)process substitution . Bash 在某个目录中创建一个 fifo 并在 <(...) 中运行命令并将表达式替换为 fifo 名称。进程替换具有(奇怪的)生命周期规则,但它们通常在命令或行结束之前有效。例如:

$ cmd=<(echo 123); echo cmd=$cmd; cat $cmd
cmd=/dev/fd/63
123

<<-EOFhere document .如果有-delimeter 之前,随后行的前导制表符(包括带有 delimeter 的行)将被忽略。 (注意:stackoverflow 不保留标签)。

$ echo -e '
cat <<EOF
\tblabla
EOF
cat <<-EOF
\t\t\t\t\tblabla
\t\t\t\t\t\t\t\t\t\t\t\t\tEOF
' > file.sh
$ bash ./file.sh
blabla
blabla

notify @<(...)只是替换<(...)部分内部 /dev/fd/<number>并执行 notify @/dev/fd/<number> .可能是 @用于notify过程表明它应该从文件中读取,参数的其余部分是文件名。然后 cat将输出绑定(bind)到 /dev/fd/<number> 的进程使用进程替换创建的 fifo,cat进程接收到这里的文档内容{ <more json data> }在标准输入上。 cat输出标准输入到输出然后我猜notify读取先进先出并接收字符。

关于bash - @<(cat <<- EOF 在 Bash 中做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62362244/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com