コマンドの出力を別のコマンドにファイルとして提供します。

コマンドの出力を別のコマンドにファイルとして提供します。

次のコマンドを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

あなたが探しているものはプロセスの置き換えと呼ばれます。これはシェルの標準機能ではありませんが、Bash/ksh/zshでサポートされています。一例:

$ echo <(echo foo)
/dev/fd/63
$ cat <(echo foo)
foo

<(cmd)シェルが出力を読み取れるように、ソートされたファイル名を拡張しますcmd。 Linuxでは可能です/dev/fd/NNが、システムとシェルに応じて名前付きパイプにすることもできます。

だから、あなたが使えると思います。

tor -f  <(cat <<EOF
...
...
EOF
)

上記の場合は、リダイレクトを代わりにcat使用できます。これはと同じ違いです。デフォルトではstdinを読み取るため、両方とも機能しますが、ツールにファイル名が必要な場合、リダイレクトは追加されません。cat < <(echo foo)cat <(echo foo)cat < somefilecat somefilecat


torとにかく、上記は少し複雑なので、途中で他のプロセスなしでちょうどhere-docを読むのが最善です。標準入力を読み取るだけです。

いくつかのユーティリティは、与えられたファイル名があればstdinから読み取るか、stdoutに書き込みます。-ただし、サポートされていない場合(または)をtor使用できるため、これが機能できるようです。/dev/stdin/dev/stdout

tor -f /dev/stdin <<EOF
...
...
EOF

もちろん、他のためにstdinが必要ない限り。この場合、ここで説明されているように他のfdを使用できる必要があります。

tor -f /dev/fd/9 9<<EOF
...
...
EOF

(サポートシステムが必要ですが/dev/fd/NN

おすすめ記事