関数の出力をキャプチャして終了するようにしてください。

関数の出力をキャプチャして終了するようにしてください。

次のように定義するとしますfct

fct() {
  echo words
  read -n1 x
  [ $x == q ] && exit
}

呼び出しは期待どおりに機能しますが、fct出力をキャプチャする必要がある場合は機能しません。オンラインで検索した内容によると機能しますが、結果シェルは終了します。それは動作するので、同じプロセス、異なるコンテキストで実行され、シェルではなくコンテキストだけを終了します。var=`fct`exitexitkill -s KILL $$fct=exit

fct出力をキャプチャし、exit同じコンテキストで同じように終了するように呼び出すことができるメソッドはありますか?それとも強制終了以外にプロセスを停止する他の方法はありますか?

答え1

私はそれを考えた!

一時ファイルを介してストリームを渡すことができます! Linuxでは、/dev/shmデータがメモリに保持されるようにファイルを介して渡すことができます。関数で包むこともできます:

get_output() {
  $1 > /dev/shm/bash_pipe
  eval $2=`cat /dev/shm/bash_pipe`
  rm /dev/shm/bash_pipe
}

その後、次のように使用できます。そしてget_output fct varwithの出力を使うことができます。fct$var

関連情報