执行另一个命令输出中给出的行

时间:2016-08-18 14:20:47

标签: linux bash pipe

警告:这个问题不是关于git的使用,而是关于Linux中管道的使用,这里给出git命令作为示例。

输出git push

fatal: The current branch my_branch has no upstream branch.
To push the current branch and set the remote as upstream, use

   git push --set-upstream origin my_branch

我想执行给定的命令,即git push --set-upstream origin my_branch

通过git push 2>&1 | tail -3我在屏幕上显示git push --set-upstream origin my_branch

问题:应该向下一个管道添加什么命令,以便执行git push。所以我可以做git push 2>&1 | tail -3 | command_to_eval_given_string

2 个答案:

答案 0 :(得分:2)

只需管道bash本身:

git push ... | bash

这会将先前管道中的标准输出发送到bash,然后执行它。

$ echo "echo 'hello'" | bash
hello
$ echo "uptime" | bash
 16:22:37 up  7:31,  3 users,  load average: 0,03, 0,14, 0,23

答案 1 :(得分:1)

您可以将管道换成命令替换并eval,而不是管道到另一个命令。这将在您当前的shell会话中执行该命令。例如:

eval "$(printf 'some output 1\nsome output 2\necho execute me'| tail -1)";
## execute me