我试图了解 Bash 是如何处理以下行的:
$(< "$FILE")
Run Code Online (Sandbox Code Playgroud)
根据 Bash 手册页,这相当于:
$(cat "$FILE")
Run Code Online (Sandbox Code Playgroud)
我可以按照第二行的推理思路。Bash 对 执行变量扩展$FILE,进入命令替换,传递$FILEto的值cat,cat 将内容$FILE输出到标准输出,命令替换通过用内部命令产生的标准输出替换整行来完成,Bash 尝试执行它一个简单的命令。
但是,对于我上面提到的第一行,我理解为:Bash 在 上执行变量替换$FILE,Bash 打开$FILE以读取标准输入,以某种方式将标准输入复制到标准输出,命令替换完成,并且 Bash 尝试执行生成的标准输出。
有人可以向我解释如何$FILE从标准输入到标准输出的内容吗?
bash 模式的意义是什么[...] & wait $!?例如:
curl -LsS $AZP_AGENT_PACKAGE_LATEST_URL | tar -xz & wait $!
Run Code Online (Sandbox Code Playgroud)
我将其理解为:
&bash 在后台子 shell 中运行先前的管道。wait $!等待管道完成后再返回。但如果是这样的话,它与仅仅运行管道本身有什么不同呢?重点是什么?
包含此示例(以及其他一些实例)的脚本可以在以下位置找到:
https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/docker?view=azure-devops
在尝试输出重定向和进程替换时,我偶然发现了以下命令及其结果输出:
me@elem:~$ echo foo > >(cat); 回声条
酒吧
我@elem:~$ foo
(是的,最后那个空的换行符是故意的。)
所以 bash echo 的栏,打印我通常的提示,echo 的 foo,echo 是一个换行符,并将我的光标留在那里。如果我再次按回车键,它会在新行上打印我的提示并将光标留在后面(当有人在空命令行上按回车键时,正如预期的那样)。
我期待它将 foo 写入文件描述符,cat 读取它和 echo 的 foo,第二个 echo echo 的 bar,然后返回到命令提示符。但显然情况并非如此。
有人可以解释一下发生了什么吗?