![想要的示例:此处为 fd 的字符串](https://linux22.com/image/188333/%E6%83%B3%E8%A6%81%E7%9A%84%E7%A4%BA%E4%BE%8B%EF%BC%9A%E6%AD%A4%E5%A4%84%E4%B8%BA%20fd%20%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
man bash
具有此重定向功能:[n]<<<word
.有了这样的解释:
The result is supplied as a single string, with a newline appended,
to the command on its standard input (or file descriptor n if n is specified).
我正在努力让它发挥作用,但无法真正找到解决方案。
$ exec 4>out
$ 4<<<asdfwefwef
这似乎没有起到任何预期的作用。
这应该如何运作?
答案1
困难在于找到一个从 fd4 读取的标准实用程序。这说明 fd4 获取字符串:
$ ( cat 0<&4 ) 4<<<'Hello, World!'
Hello, World!
$
或者,您可以使用read -u
将字符串走私到脚本中,而不使用 stdin 或参数:
$ read -u 4 FOO 4<<<42 && echo $FOO
42
$
在实践中,读取将被深埋在脚本中,并且脚本将从命令行继承 fd4 重定向。
$ cat Fd4
#! /bin/bash
#.. Read from stdin
read -r A B C
printf '%s %s %s %s %s\n' $A $B $C $D $E
#.. Read from here string.
read -r -u4 D B E
printf '%s %s %s %s %s\n' $A $B $C $D $E
$ echo stdin gets this | ./Fd4 4<<<'fd4 sees that'
stdin gets this
stdin sees this fd4 that
$