响应控制台输出的 shell 脚本

响应控制台输出的 shell 脚本

免责声明:: 我不是活跃的 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编写。

相关内容