私はこれがサブシェルプロセスで実行するのとは異なることを読んでいます$coproc < command >
。$< command > &
coproc
command
しかし、テストしてみると、$< command > &
次のように動作します。
まず、テスト行為です$< command > &
。
$nano &
走るターミナル1- 他のttyでは、
$ps -t tty1 --forest
出力は、nanoプロセスが-bashプロセスの子プロセスであることを示しています(ログインbashシェルプロセス - >生成されたサブシェルプロセスはありません)。
2番目:テスト動作$coproc < command >
$coproc nano
走るターミナル1- 他のttyでは、出力は
$ps -t tty1 --forest
上記と同じです(サブシェルプロセスは作成されません)
それでは、$coproc < command >
同じことですか$< command > &
?
使用されたシェルはバッシュシェル
ベストアンサー1
coproc utility
utility &
と同じではありませんbash
。
標準の入出力ファイル記述子を含むcoproc utility
配列を取得します。それからあなたは次のことをすることができますCOPROC
utility
#!/bin/bash
coproc bc -l
for (( k = 0; k < 50; ++k )); do
printf '2.3*%d + 1\n' "$k" >&${COPROC[1]}
read -u "${COPROC[0]}" a
printf '%.2f\n' "$a"
done
kill "$COPROC_PID"
ここでは、bc -l
シェルループの「算術計算サービス」のように動作し、標準入力に対して計算を実行するための式を取り、標準出力に結果を返すコプロセスです。
私が知っている限り、それだけをサポートしてbash
います一ついつでもコラボしてください。
シェルはksh93
共同プロセスもサポートしますが、まったく異なる(しかしより洗練された)構文を使用します。これに対応するスクリプトは次のとおりですksh93
。
#!/usr/bin/ksh93
bc -l |&
coproc_pid=$!
for (( k = 0; k < 50; ++k )); do
print -p -f '2.3*%d + 1\n' "$k"
read -p a
printf '%.2f\n' "$a"
done
kill "$coproc_pid"
ここでは-p
、明示的なファイル記述子を使用するのではなく、coprocess(次から始まるプロセス)と通信するようにするオプションがあります。print
read
|&