我可以tor
使用cat <<EOF
命令制作配置文件,如下所示:
cat <<EOF
SocksPort 9050
ControlPort 9150
DataDirectory /usr/var/lib/tor/torrc
EOF
但它可以通过重定向>
到文件来保存输出。然后使用tor -f file
但怎么直接喂呢tor -f
?我不想创建文件或任何类型的临时文件并随后删除。
- 我想要类似的东西
但它给出了tor -f < $(cat <<EOF ... ... EOF)
EOF): ambiguous redirect
- 直接重定向?
tor -f <<EOF... not worked
- 并且管道会报错。
谢谢
答案1
您正在寻找的称为流程替代;它不是 shell 的标准功能,但在 Bash/ksh/zsh 中受支持。一个例子:
$ echo <(echo foo)
/dev/fd/63
$ cat <(echo foo)
foo
扩展<(cmd)
为 shell 安排的文件名,以便从中读取输出cmd
。在 Linux 上,有可能/dev/fd/NN
,但也可能是命名管道,具体取决于系统和 shell。
所以,我想你可以使用
tor -f <(cat <<EOF
...
...
EOF
)
请注意,上面的 with cat
,我可以使用cat < <(echo foo)
重定向而不是cat <(echo foo)
,它与cat < somefile
and 的区别相同cat somefile
。cat
两者都可以使用,因为它默认读取 stdin,但如果该工具需要文件名,则不会添加重定向。
不管怎样,上面的内容有点毛茸茸的,最好直接阅读tor
here-doc,中间不要再进行其他过程。你只需要让它读取标准输入即可。
如果给定的文件名是,一些实用程序会读取标准输入(或写入标准输出)-
,但如果tor
不支持,您可以使用/dev/stdin
(或/dev/stdout
),所以我想这可能有效:
tor -f /dev/stdin <<EOF
...
...
EOF
当然,除非它需要 stdin 来做其他事情。在这种情况下,您应该能够在此处文档中使用另一个 fd:
tor -f /dev/fd/9 9<<EOF
...
...
EOF
(尽管你需要一个支持的系统/dev/fd/NN
)