2016-11-23 9 views
0

私は2行、つまり認証の2つの部分を出力する外部プログラム(認証トークン生成器の一種)を持っています。2行の出力から環境変数を設定する

$ get-auth 
SomeAuthString1 
SomeAuthString2 

はその後、私は、環境変数、たとえば、AUTHPINにこれらの文字列をエクスポートします。

私はbashでいくつかのことを試みましたが、何も動作しません。例えば

、私が行うことができます。

get-auth | read -d$'\4' AUTH PIN 

が、それは失敗します。 AUTHとPINは設定されていません。もしそうなら、

get-auth | paste -d\ -s | read AUTH PIN 

でも失敗します。私がデータを入手する唯一の方法は、実行することです。ただし、サブシェルでのみ明らかです。その結果からのエクスポートはありません

少しの研究で、私はthis answerを見つけました。私はそれができないことを意味するかもしれません。しかし、私は間違っているかもしれません。私はまた、読み取る前に{でサブシェルを開くと、値が}で終わるまでサブシェルで利用できることも発見しました。

2行出力から環境変数を設定できる方法はありますか?私は明らかにそれをファイルに保存したくないので、そのためにFIFOを設定する必要はありません。それらを達成する唯一の方法はありますか?

+0

次のようなものです: 'authstrings = \' get-auth \ ';エクスポートAUTH = $ authstrings [0];輸出PIN = $ authstrings [1] '可能ですか? – Gavin

+1

'{...}'はサブシェルを作成せず、グループ化されたコマンドだけを作成します。これは、あなたが発見したように、サブシェルを作成する*パイプ*です。 – chepner

答えて

0

サブシェルが問題でした。あなたはreadコマンドを使用して同じことを達成するためにbashprocess-substitution<()を使用することができます

read -d $'\4' AUTH PIN < <(get-auth) 
3

:私はそれを実行して動作させることができました。

$ cat file 
123 
456 

コマンド置換を正しく使用すると、コマンド出力を保持できます。デリミタとしてread\nを使用します。

$ read -r -d'\n' a b < <(cat file) 
$ printf "%s %s\n" "$a" "$b" 
123 456 

現在、変数は現在のシェルで使用できますが、いつでもexportにすることができます。

+1

'<(...)'は*プロセス*置換であり、コマンド置換ではありません( '$(...)')。 – chepner

+0

@chepner:それを書いている間に思考過ぎる。 :)固定しました – Inian

関連する問題