从脚本执行命令与 CLI 之间的区别

问题描述 投票:0回答:1

我正在执行以下 bash 脚本:

MACHINE=`cat ~/mach`
SSH_CMD="ssh -v root@$MACHINE -t 'echo foo'"
echo $SSH_CMD
$SSH_CMD

当我执行包含上述内容的脚本时,我收到 echo foo: command not find 。但是,如果我复制并粘贴回显的 SSH_CMD 并从命令行手动运行它,我就可以在控制台上打印 foo 。有什么不同以及如何解决?

我期待两者有相同的行为,因为它们看起来完全相同。

bash
1个回答
0
投票

打印命令和执行命令是有区别的。

echo 只会尝试打印,但不会实际执行。

因此您可以尝试以下两种方法中的任何一种:-

#1 MACHINE='cat ~/mach'
   SSH_CMD=$(ssh -v root@$MACHINE -t 'echo foo') #run the command and store output in variable
   echo $SSH_CMD  #print the output --> 'foo'

#2 MACHINE=`cat ~/mach`
   SSH_CMD="ssh -v root@$MACHINE -t 'echo foo'"
   eval $SSH_CMD   # eval will execute the command stored inside the variable and print the output 'foo'
© www.soinside.com 2019 - 2024. All rights reserved.