我正在执行以下 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 。有什么不同以及如何解决?
我期待两者有相同的行为,因为它们看起来完全相同。
打印命令和执行命令是有区别的。
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'