Bash:是否将输出文件保存到变量或数组中?

时间:2019-04-24 20:35:10

标签: bash shell sh

例如,对于curl,我想使用--cookie-jar选项将cookie保存到变量或数组中,以便稍后在脚本中使用。默认情况下,--cookie-jar选项尝试将cookie保存到本地文件。我想做这样的事情来保持脚本的独立性:

$ curl --cookie-jar $cookies 'https://duckduckgo.com/'

然后:

$ curl --cookie $cookies 'https://duckduckgo.com/'

在Bash中有可能吗?

1 个答案:

答案 0 :(得分:2)

指定-为输出文件写入标准输出。可以像往常一样将输出分配给变量:var="$(command)"。但是,这仍将包括该网页。要仅存储Cookie,您必须使用-o file选项将网页输出到文件中。示例:

cookies="$(curl --cookie-jar - stackoverflow.com -o webpage.html)"
echo "$cookies"

我不确定是否可以在不使用任何文件的情况下可靠地将网页和cookie分配给bash中的独立变量。这是一些丑陋的方法:

  • 解析输出并在# Netscape HTTP Cookie File行进行拆分。
    问题:
    1. 网页或cookie也可能包含该行,因此我们将在错误的位置进行拆分。
    2. 网页和cookie可以交错。
  • 运行两次curl。在第一次运行中,仅存储cookie。在第二次运行中,仅存储网页。
    问题:
    1. 该网页的每次运行行为可能有所不同。
    2. 运行curl两次效率低下。

要使用--cookies读取cookie,最好模拟文件而不是将cookie作为字符串参数传递。您可以再次将-指定为文件并从stdin中读取,或使用bash的<()语法:

curl --cookie - stackoverflow.com <<< "$cookies"
curl --cookie <(printf %s "$cookies") stackoverflow.com