从两行输出

时间:2016-11-23 18:56:19

标签: bash

我有一个外部程序(一种身份验证令牌生成器),它输出两行,我的身份验证的两部分。

$ get-auth
SomeAuthString1
SomeAuthString2

然后,我想将这些字符串导出到环境变量中,例如AUTHPIN

我在bash中尝试了几件事,但没有任何作用。

例如,我可以这样做:

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

但它失败了。 AUTH和PIN仍未设置。如果我做

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

它也失败了。我可以通过

获取数据的唯一方法
get-auth | { read AUTH; read PIN; }

但显然只在子shell中。从那里导出没有结果

一些研究,我发现this answer可能意味着我不能这样做(从管道读取变量读取变量)。但我可能错了。我还发现,如果我在读取之前打开带有{的子shell,则可以在子shell中使用这些值,直到我使用}完成它。

有什么方法可以从双线输出设置环境变量?我显然不想将其保存到文件中,我不想为此设置FIFO。这些是完成这项工作的唯一方法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用bash process-substitution<()使用read命令实现相同目标。

$ cat file
123
456

正确使用命令替换可以保留命令输出。使用read\n作为去限制因素;

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

现在变量在当前shell中可用,您始终可以export

答案 1 :(得分:0)

子shell是问题。我能够通过这样做来实现:

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