我使用cronjob执行到主机的文件传输,然后telnet到主机,并pipe理一些命令。
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" ||:
看来无论我pipe/回声进入会话得到并行执行,它发生在sql完成执行之前执行退出。 我试图在退出命令之前睡觉,但那是一个猜谜游戏。
我知道这种方法当然不是最安全的,因为密码等。 所以,如果有一个更安全,更安全的方式做这项工作,让我知道。
感谢任何提示
“预期”是编写这种交互的常用方法。
+1预期。
但是,如果你和我一样,你会发现tcl(expect的母语)非常痛苦。
如果你深入维基百科的文章,你会发现有perl和python(当然还有其他)绑定的期望,让你做更less的代码痛苦所需的所有互动的东西。
祝你好运。
Perl也有IPC :: Run ,在使用Expect(在Tcl和Perl中)之后,我开始使用它了。 当我完成时,基于IPC::Run
的代码往往更短,更易于阅读。