如何从变量执行命令并在 Bash 中捕获其输出?[复制]

How do I execute a command from a variable and capture its output in Bash? [duplicate]

提问人:Shaliath 提问时间:10/19/2023 更新时间:10/19/2023 访问量:104

问:

我想将一个变量设置为一个命令,然后执行它并在另一个变量中捕获输出。我希望同时拥有命令和输出,以便进行日志记录。

对于跑步,我认为以下方法应该有效:ls

command="ls"; out=$(command); echo $out

但是,当我运行它时,输出是空的,这意味着它从未被执行过。那么,我怎样才能执行它并捕获输出呢?ls

原因是我想在一个地方更容易更改命令,而不是在任何地方使用它,例如,如果需要更改到。ls -l

这样做是有效的,但如果我想添加标志,则需要在 2 个地方进行更改: ,这使得它容易出错并且更难使用。command="ls"; out=$(ls); echo $outcommand="ls -l"; out=$(ls -l); echo $out

顺便说一句,我尝试做的比这个例子更复杂,它在多个地方使用命令

bash shell 变量 命令行

评论

2赞 Charles Duffy 10/19/2023
我试图将命令放入变量中,但复杂的情况总是失败!-- 不要将命令放在(简单的字符串类型)变量中;链接的 FAQ 提供了替代方案(例如数组)。
1赞 Charles Duffy 10/19/2023
另外,请注意,您的意思是,您正在评估变量,而不是运行名为 的命令(是的,有一个名为 ) 的 shell 内置命令 - 但同样,由于常见问题解答列出的原因,不要执行任何操作。out=$($command)$commandcommandcommand
1赞 Charles Duffy 10/19/2023
FAQ中列出的另一个替代方法是函数,如: (注意使用 of 以避免覆盖内置命令)。mycommand() { ls -l; }; out=$(mycommand); echo "$out"mycommandcommand
0赞 Shaliath 10/19/2023
哦,这很有帮助。 似乎最适合我正在尝试做的事情。 谢谢!out=$($command)
0赞 Charles Duffy 10/19/2023
阅读 BashFAQ #50,以便了解失败的方式和时间。(另一种方法是 ,但这会受到 BashFAQ #48 中讨论的安全问题的影响)。通常有一种方法可以使良好实践方法起作用,但除非我们知道为什么它们乍一看不适合您,否则我们无法深入探讨细节。out=$($command)out=$(eval "$command")

答: 暂无答案