gpt4 book ai didi

linux - 在 Bash 中,如何将管道的末尾流式传输到变量中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:18 26 4
gpt4 key购买 nike

我知道在管道末端设置的任何变量都会丢失(不包括 Bash 4 中的 shell 选项——不幸的是,这需要一个可移植的解决方案)。但是,我确信必须有一种方法可以使用文件描述符或其他方法将管道末端的输出流式传输到变量中,即使是通过一些复杂的路由也是如此! :)

理想情况下,我想要一个带有一个参数的命令/函数,一个变量的名称最终将导致包含管道其余部分的输出。

我有一个函数可以以可移植的方式找到它的下一个空闲文件描述符:

getFd ()
{
# we'll start with 3 since 0..2 are mapped to standard in, out, and error respectively
local myFD='3'
# we'll get the upperbound from bash's ulimit
local FD_MAX=$( ulimit -n )
local FD_LOC
if [ -e /proc/$$/fd ]
then
FD_LOC="/proc/$$/fd"
elif [ -e /dev/fd ]
then
FD_LOC="/dev/fd"
else
return 1
fi
while [ -e "${FD_LOC}/${myFD}" ] && [ "${myFD}" -le "${FD_MAX}" ]
do
((++myFD))
done
eval FD="${myFD}"
}

我想我可能需要做一些事情,比如之前创建一个打开的文件描述符池,可以通过一些别名 jiggery pokey 或其他东西拉入,但我希望我错过了一些更简单的方法,因为我确信必须是一种更好的方式。

我也在想如果我加上printf %s "${myFD}"最后我可以做类似 alias '{FD}'="$( getFd )" 的事情实现 Bash 4 自动查找下一个可用文件描述符的功能,以 {FD} <filename 的形式使用注意:需要有一个空间,但如果这可以工作,那么将这个功能引入 bash 3.0 将是很好的例子。此外,可能必须使用 shopt -s expand_aliases .

任何想法将不胜感激!

附言我试图避免强制 MyCommand MyVariable < <( command1 | command2 ; ) ;键入语法并且正在努力是否可以以以下结尾:$ command1 | command2 | MyCommand MyVariable ;使用类型。

最佳答案

你的问题有点令人困惑,但我猜你想将用户定义的变量名设置为第一个可用的文件描述符。

如果是这种情况,您的函数应该简单地回显 fd 编号:

getFD() {
...
echo $myFD
}

然后假设 foo 包含存储 fd 的变量名称,假设它包含字符串 bar:

eval $foo=`getFD`

之后变量 bar 将包含第一个可用的 fd。

关于linux - 在 Bash 中,如何将管道的末尾流式传输到变量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30008446/

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