将脚本(管道)命令放入 telnet 会话中

将脚本(管道)命令放入 telnet 会话中

我使用 cronjob 执行文件传输到主机,然后 telnet 进入主机并将一些命令输入其中。

HOST=somehost
USER=postgres
PASSWD=blabla
ftp -n -v $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put schema_1.sql
put schema_2.sql
quit
END_SCRIPT

(sleep 20;
 echo "blabla2";
 sleep 5;
 echo "psql -d cb3db -f schema_1.sql";
 echo "psql -d cb3db -f schema_2.sql";
 echo "rm *.sql";
 echo "exit;"
 ) | telnet -l postgres somehost
echo "END OF REMOTE SCRIPT" ||:

似乎无论我通过管道/回显发送到会话中的什么内容都会并行执行,exit 会在 sql 执行完成之前执行。我尝试在 exit 命令之前放置 sleeps,但这更像是一个猜谜游戏。

我知道这种方法肯定不是最安全的,因为有密码等。所以如果有更安全、更可靠的方法来完成这项工作,请告诉我。

感谢任何提示

答案1

“期望”是编写此类交互的常用方法。

http://en.wikipedia.org/wiki/Expect

答案2

期待+1。

然而,如果你像我一样,你会发现 tcl(expect 的母语)非常痛苦。

如果您深入研究维基百科文章,您会发现有 perl 和 python(当然还有其他)绑定可用于 expect,让您能够以更少的代码痛苦完成所需的所有交互操作。

祝你好运。

答案3

Perl 还有IPC::运行在多次使用 Expect(在 Tcl 和 perl 中)后,我开始使用它。IPC::Run完成后,我的基础代码往往更短,更易于阅读。

相关内容