gpt4 book ai didi

shell - 使用 shell 脚本在远程计算机上运行脚本后终止连接的问题

转载 作者:行者123 更新时间:2023-12-04 06:35:56 24 4
gpt4 key购买 nike

这是我第一次写shell脚本。我试图做尽可能多的研究,以避免愚蠢/重复的问题。如果它重复/愚蠢的问题,请原谅。

我有一个 shell 脚本,它连接到远程 linux 机器并在那里运行脚本。我正在使用“期望”来生成 ssh 连接并发出命令来触发作业。但是,我在完成工作后关闭连接时遇到问题。

这是我的脚本:

set prompt "(%|#|\\$|%\]) $"


expect -c 'spawn ssh $UN@$STAGE ;
expect password ; send "$PASS \n";
expect -regexp "$PROMPT"; send "./settings.$UN.sh > settings_log.txt \n";
interact'

这个脚本成功地为我运行了脚本文件($UN 和 $STAGE 参数被输入到脚本中。为了简单起见,我在这里省略了)。然而,这给我留下了一个开放的联系。
我尝试在运行脚本后使用以下而不是上面来关闭连接
expect -c 'spawn ssh   $UN@$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 根本没有生成。

这是否意味着退出命令在完成之前中止了进程?我尝试在退出前使用“ sleep ”,但没有帮助。使用expect时是否有更好的建议方法来终止连接?
任何帮助表示赞赏。

最佳答案

使用expect,您可以使用\r 终止发送命令不是 \n , 所以

 expect -c 'spawn ssh   $UN@$STAGE
expect password
send "$PASS\r"
expect -regexp "$PROMPT"
send "./settings.$UN.sh > settings_log.txt\r"
expect -regexp "$PROMPT"
send "exit\r"
expect eof'

关于shell - 使用 shell 脚本在远程计算机上运行脚本后终止连接的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4878898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com