bashを使用してコマンドに子プロセスを渡す方法

bashを使用してコマンドに子プロセスを渡す方法

複数の出力を単一のコマンドにパイプ処理するために子プロセスを使用しようとしています。私のコマンドは次のとおりです(短縮バージョン)。

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)
}

しかし、オリジナルのファイル処理魔法があります。

関連情報