Bash
將命令的輸出作為文件提供給另一個命令
我可以
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
- 並且管道會出錯。
謝謝
您正在尋找的稱為流程替換;它不是 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)
重定向而不是,這與 with和cat <(echo foo)
的區別相同。兩者都適用,因為它預設讀取標準輸入,但如果該工具需要文件名,則不會添加重定向。cat < somefile``cat somefile``cat
反正上面有點毛,最好
tor
直接看here-doc,中間不用另外處理。你只需要讓它讀取標準輸入。如果給定的文件名是,一些實用程序讀取標準輸入(或寫入標準輸出)
-
,但如果tor
不支持,您可以使用/dev/stdin
(resp./dev/stdout
),所以我想這可能有效:tor -f /dev/stdin <<EOF ... ... EOF
除非它當然需要標準輸入來做其他事情。在這種情況下,您應該能夠將另一個 fd 與 here-doc 一起使用:
tor -f /dev/fd/9 9<<EOF ... ... EOF
(雖然你需要一個支持的系統
/dev/fd/NN
)