私のコンピュータに(Ruby Version Manager)をインストールしましたが、rbenv
次のように動作します。
$ rbenv local
2.3.1
に書く標準出力私のローカルバージョンのRubyです。このバージョンを救出し、他の場合に再利用できるように変数に宣言したいと思います。
$ declare -r RUBY_DEFINED_VERSION=$(rbenv local)
$ echo Using ruby version $RUBY_DEFINED_VERSION
Using ruby version 2.3.1
効果がある!
しかし、使用したくないサブシェル作業を完了します($()
または使用``
)。私も同じように使いたいシェル私tmp操作を完了するために必要なファイルです。
これを行う方法はありますか?
メモ: declare -r
必須ではなく、簡単にすることができますvar=FOOBAR
。
ベストアンサー1
ハッキングがありますが、ループを介して実行する必要がある場合は意味があると思います。
次のように開くことができますcat
coproc
。coproc CAT { cat; }
これにより、cat
バックグラウンドでコマンドが実行され、2つの環境変数(CAT_PID
および)が設定されますCAT
。この変数は、使用されるファイル記述子(パイプ)を(順番に)含むCAT
配列です。STDOUT
STDIN
cat
&${CAT[1]}
したがって、表示されるすべての項目に出力を書き込むことができ、STDIN
組み込みコマンドを使用してread
読み取る変数をcatに設定${CAT[0]}
できますSTDOUT
。
例は次のとおりです。
coproc CAT { cat; }
echo 123 >&${CAT[1]}
read myvar <&${CAT[0]}
テストするには:
echo $myvar
123
使用後は猫をブロックすることを忘れないでください。プロセスを終了したらこれを行うことができます。
kill $CAT_PID
これはパフォーマンスチューニングに大きな影響を与えます。
更新:区切り文字列をbash
実装しましたnull
。だからバイナリデータを扱うときはread
本当に面倒です。一度に1バイトずつ読み取ることができ、nullは変数の空の文字列にLC_ALL=C read -r -n1 -d $'\0'
なります。${REPLY}