我有一个外部程序(一种身份验证令牌生成器),它输出两行,我的身份验证的两部分。
$ get-auth
SomeAuthString1
SomeAuthString2
然后,我想将这些字符串导出到环境变量中,例如AUTH
和PIN
。
我在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。这些是完成这项工作的唯一方法吗?
答案 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)