bash如何将异步命令输出到变量

时间:2015-11-12 06:22:23

标签: linux bash

我想知道如何在bash中将命令输出变为变量

这是我的代码

#!/bin/bash
opt="svcrack -v -u100 -r1-9999 -z3 10.0.0.1"
opt2="$($opt)"

echo "myout output $opt2"

输出

myout output 

不在函数内部工作:(

function zwork(){

opt=$(svcrack -v -u100 -r1-9999 -z3 10.0.0.1 2>&1)

echo "myout output $opt"
}

out=$(zwork)

2 个答案:

答案 0 :(得分:1)

请尝试将stderr重定向到stdout,如:

#!/bin/bash
opt=$(svcrack -v -u100 -r1-9999 -z3 10.0.0.1 2>&1)

echo "myout output $opt"

您可以在此处详细了解command substition

答案 1 :(得分:0)

如果将命令存储在bash中的变量中,则需要使用 eval 关键字来执行该命令。 所以在你的情况下你应该做这样的事情......

opt="svcrack -v -u100 -r1-9999 -z3 10.0.0.1"
opt2=$(eval $opt)
echo "myout output $opt2"

更正:我在ZSH中测试了这个(不是纯粹的bash),所以我需要添加 eval ,最后假设这是丢失的位。然而有人在评论中纠正了我。这不是必要的。

OP脚本中只有问题是

opt2="$($opt)"

应该是

opt2=$($opt)