这是我第一次编写shell脚本。为了避免愚蠢/重复的问题,我尝试尽可能多地进行研究。请原谅,如果它的重复/愚蠢的问题。使用shell脚本在远程计算机上运行脚本后终止连接的问题
我有一个shell脚本,它连接到远程linux机器并在那里运行脚本。我使用'expect'来产生ssh连接并发出命令来触发作业。但是,我在完成作业后关闭连接时遇到问题。
这是我的脚本:
set prompt "(%|#|\\$|%\]) $"
expect -c 'spawn ssh [email protected]$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
interact'
该脚本运行成功对我来说,脚本文件($联合国和$ STAGE参数输入到剧本我省略了这里简单)。但是,这给我留下了一个开放的连接。 我试图通过使用脚本运行后关闭连接以下,而不是上面
expect -c 'spawn ssh [email protected]$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
expect -regexp "$PROMPT"; send "exit \n"'
这不关闭连接,但我发现我的脚本文件没有运行在所有。另外settings_log.txt根本不会生成。
这是否意味着退出命令在完成之前中止了进程?我尝试在退出前使用“睡眠”,但没有帮助。使用expect期间是否有更好的建议方式来终止连接? 任何帮助表示赞赏。
你能向我解释什么期望* -regexp“$提示符” *呢?我不熟悉* expect *。 – user359996 2011-02-02 19:52:14
这是第一次与预期。 expect -regexp“$ PROMPT”等待shell完成其工作,并返回用户输入。例如 我开始使用ssh连接。 expect -c'spawn ssh $ UN @ $ STAGE; 现在,我知道ssh会要求输入密码。由于我知道这一点,所以我可以告诉我的脚本为它做好准备并在发生这种情况时发送密码。这是通过以下语句实现的。 期待密码;发送“$ PASS \ n” 您也可以给正则表达式expect.That是我试图做的。我在顶部定义了一个变量($ PROMPT)并在下一个语句中使用它 – PraveenGorthy 2011-02-02 22:54:50