Bash

將命令的輸出作為文件提供給另一個命令

  • June 2, 2022

我可以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

引用自:https://unix.stackexchange.com/questions/704703