Bash 脚本:永久管道
Bash scripting: permanent pipe
这是我尝试编写的脚本:
#!/bin/bash
cat <&3 & # runs in background, takes input from file desc 3
echo "To Terminal"
...
echo "To cat" 1>&3
echo "to cat again" 1>&3
本质上,我希望我的脚本生成一个程序(在本例中为 cat)并能够通过文件描述符向其发送输入。
这行不通 ("bad file descriptor"),我认为是因为文件描述符必须与真实文件相关联。然后我需要的是能够创建一个 永久管道 和一个关联的描述符(例如 3),我可以在整个程序中使用它来写入 cat 。我该怎么做?
尝试:
#!/bin/bash
exec 3> >(cat)
echo "To Terminal"
echo "To cat" 1>&3
echo "To cat again" 1>&3
exec 3>&-
cat
,当然,没有做任何有趣的事情。对于一个仍然简单但稍微更有趣的输出的示例,将 cat
替换为 awk
:
exec 3> >(awk '{print NR,length([=11=]),[=11=]}')
这是我尝试编写的脚本:
#!/bin/bash
cat <&3 & # runs in background, takes input from file desc 3
echo "To Terminal"
...
echo "To cat" 1>&3
echo "to cat again" 1>&3
本质上,我希望我的脚本生成一个程序(在本例中为 cat)并能够通过文件描述符向其发送输入。
这行不通 ("bad file descriptor"),我认为是因为文件描述符必须与真实文件相关联。然后我需要的是能够创建一个 永久管道 和一个关联的描述符(例如 3),我可以在整个程序中使用它来写入 cat 。我该怎么做?
尝试:
#!/bin/bash
exec 3> >(cat)
echo "To Terminal"
echo "To cat" 1>&3
echo "To cat again" 1>&3
exec 3>&-
cat
,当然,没有做任何有趣的事情。对于一个仍然简单但稍微更有趣的输出的示例,将 cat
替换为 awk
:
exec 3> >(awk '{print NR,length([=11=]),[=11=]}')