在bash中使用文件中的行作为命令

时间:2017-11-10 18:24:56

标签: bash

如果我有一个包含三行这样的文件

line 1
line 2
curl -H 'Content-Type: application/json' -d '{"user": "joe"}' localhost/api

如何在bash中执行第三行作为命令?

我试过

$(sed '3q;d' file)

`sed '3q;d' file`

但似乎在这两种情况下命令只是部分执行,我没有得到正确的结果。当然,直接调用curl工作正常。

3 个答案:

答案 0 :(得分:2)

不带引号的扩展运行字符串拆分和通配,但不是解析过程的其他阶段。因此,它不会引用引号,重定向或其他扩展。

出于安全原因,这实际上是一件好事 - 想想如果您不得不担心脚本处理的不受信任数据中存在字符串for (int i = 0; i <= Board.GetUpperBound(0); i++) { for (int j = 0; j <= Board.GetUpperBound(1); j++) { Board[i, j] = ' '; } } 会发生什么!

也就是说,如果您完全信任此文件的内容,则可以使用$(rm -rf ~)在整个解析过程中运行它:

eval

答案 1 :(得分:0)

如何使用bash标志运行-c子流程?

bash -c "$(sed '3q;d' file)"

答案 2 :(得分:0)

Bash 4 / Bash 3.2(Mac)或更高版本,您可以从流程替换中获取文件:

source <(sed '3q;d' file)

或更短:

. <(sed '3q;d' file)