
複数の出力を単一のコマンドにパイプ処理するために子プロセスを使用しようとしています。私のコマンドは次のとおりです(短縮バージョン)。
cat "$1"
one=cat "$1"
の出力はcommand <(echo "foo")
次のとおりです。
foo
/dev/fd/63: Permission denied
機能するため、cat "$1"
関数に子プロセスの出力を読み取る権限があると仮定しますが、それを変数に入れようとすると権限が拒否されます。なぜこれが起こり、解決策がありますか?
答え1
あなたの質問は完全にはっきりしていません。しかし、x
次のようなコマンドがあると思います。
cat "$1"
one=$(cat "$1")
これでx <(echo "foo")
エラーが発生します。
<(...)
これは、構造がどのように機能するかによるものです。
デフォルトで実行され、echo foo
出力を一時ファイルハンドル(/dev/fd/63
)に接続してからパラメータに渡します。
最初のcat
コマンドは入力全体を読み込みます。これは、入力が残っていないことを意味します。だからあなたの第二 cat
コマンドに読み込む内容がありません。echo
プロセスが完了し、読み取るオープンハンドルがないため、エラーが発生します。
シンプルな形で特別版を完成しました。
echo "foo" | {
cat
one=$(cat)
}
しかし、オリジナルのファイル処理魔法があります。