免责声明:: 我不是活跃的 shell 脚本编写者
如何创建一个响应控制台输出的脚本?例如,我正在尝试设置一个 cron ,定期在每午夜将 svnsync 对我的存储库的更改发送到备份服务器。问题是,为了同步,它会提示输入授权凭据。
svnsyncsync 不接受指定登录的选项,因此不再需要一个简单的 cron 命令。我相信我可以启动一个脚本,但我正在尝试找出如何使其响应控制台输出。
例如:
ken@server:~$ svnsync sync https://svn3.backup.net/svn/mirror
Authentication realm: <https://svn3.backup.net/svn/mirror:443> backup.net Subversion Backup
Password for 'ken':
***<send return key>***
Username:***<specify backup.net username>***
Password for '<the name>':***<specify password for username>***
<It proceeds to check out>
***< message >***
我希望脚本响应的操作在哪里。
答案1
当你说“svnsync同步不接受指定登录的选项”时,我很怀疑,所以我检查了文档你猜怎么着,它做:
--source-password
--source-username
--sync-password
--sync-username
这些选项应该足以让您返回到简单的 cron 脚本。
回到你的情况真的虽然无法指定此类选项,但编写将数据发送到程序的标准输入的包装器脚本仍然很容易。例如下面的可能work(program
您要运行的程序在哪里,并且text
是存储要发送到程序的文本的文件):
program < text
然而,为了进行身份验证,程序通常被编写为ready fromtty
和not from stdin
(出于安全原因)。我不熟悉它,但在这种情况下你仍然可以创建一个假终端。这是哪里expect
投入使用。
答案2
expect
可能有帮助。
有一个奥莱利教程。
答案3
但这意味着在某些脚本中明确密码。
这不是一个好主意。
svnsync 没有 ssh 密钥选项吗?
答案4
两个类似的解决方案:
expect
(如其他答案所示),这需要TCL。pexpect
,用纯Python编写。