我使用 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
“期望”是编写此类交互的常用方法。
答案2
期待+1。
然而,如果你像我一样,你会发现 tcl(expect 的母语)非常痛苦。
如果您深入研究维基百科文章,您会发现有 perl 和 python(当然还有其他)绑定可用于 expect,让您能够以更少的代码痛苦完成所需的所有交互操作。
祝你好运。
答案3
Perl 还有IPC::运行在多次使用 Expect(在 Tcl 和 perl 中)后,我开始使用它。IPC::Run
完成后,我的基础代码往往更短,更易于阅读。