简体   繁体   English

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

[英]bash how to get async command output to variable

i want to know how can we get command output to variable in bash 我想知道如何将命令输出输出到bash中的变量

here is my code 这是我的代码

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

echo "myout output $opt2"

output 输出

myout output 

not working inside function :( 内部功能不起作用:(

function zwork(){

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

echo "myout output $opt"
}

out=$(zwork)

Please try redirecting stderr to stdout like: 请尝试将stderr重定向到stdout,例如:

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

echo "myout output $opt"

Here you can read more about command substition . 在这里,您可以了解有关命令替换的更多信息。

If you store a command in a variable in bash you need to use the eval keyword to execute that command. 如果将命令存储在bash中的变量中,则需要使用eval关键字执行该命令。 So in your case you should do something like this... 因此,在您的情况下,您应该执行以下操作...

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

Correction : I was testing this in ZSH (not pure bash), so i needed to add the eval and ended up assuming that is the missing bit. 更正:我正在ZSH(不是纯bash)中对此进行测试,因此我需要添加eval并最终假设那是丢失的位。 However as someone corrected me in comment. 但是,有人在评论中纠正了我。 That is not necessary. 那是没有必要的。

Only problem in the OP script was OP脚本中唯一的问题是

opt2="$($opt)"

it should have been 应该是

opt2=$($opt)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM