2012-06-30 191 views
5

我想写一个脚本来登录到几个远程服务器并在每个服务器上执行一个脚本。 但是,我想通过ssh传递一个变量。像这样的:通过ssh传递变量

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

这个天真的尝试不起作用($ var是简单的空)。什么是正确的语法?提前致谢。

回答

4

删除从ENDSSH附近的报价。它们防止在here document内扩大变量。

+0

好吧,这个作品。但是现在,一旦“run_script”在$ mchname中完成(即使我正在使用'&'),控件就会返回到主脚本,这不是我想要的。我该如何解决它?对于基本问题抱歉。如果你愿意,你可以指点我一些ssh教程,在那里我可以看看这些东西。谢谢。 – user1477337

+0

@ user1477337:&符号在目标机器上生效,只是意味着控制器会更快地返回到主脚本,因为它不必等待'run_script'完成。但是,由于'ssh'命令及其在这里的文档没有任何内容,主脚本应该在ssh'连接关闭时立即退出,这应该几乎立即生效。但是,如果你需要某些理由,你可以尝试在'ssh'命令前添加'exec':'exec ssh ...'所有这些都与shell相关,并且大多数不是'ssh'特定的。 –

2

试试这个:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH