我需要知道如何设置一个自动连接到远程服务器并更改目录并将该目录中的所有文件到本地的 cron 作业
我想我必须使用 sftp,但我在一些 shell 脚本中看到了一些名为“spawn”的命令,我很困惑这将做什么以及有什么用?
spawn sftp user@ipaddress
cd xxx/inbox
mget *
Run Code Online (Sandbox Code Playgroud)
这会在下载远程目录的上下文中工作吗?
Expect 脚本非常适合编写基本上“确保运行此命令会打印这些日志”的测试。Expect 可以让您跳过不相关的输出并查找日志中的特定行。
有没有办法确保我们不会遇到特定的消息?
例如,一个简单的 Expect 脚本可能如下所示:
spawn ./my_launcher.sh
expect "System booted."
Run Code Online (Sandbox Code Playgroud)
有什么方法可以确保我们在“系统启动”之前不会得到某个字符串。线出现?
传达我的目标的虚构语法:
spawn ./my_launcher.sh
expect-not "license activation error"
expect "System booted."
Run Code Online (Sandbox Code Playgroud) 我正在尝试通过 shell 脚本自动安装程序。有几个步骤需要用户从命令行进行交互(确认、是/否等)。绕过它的最佳方法是什么?我知道一种可能性是使用期望脚本。只是想知道是否有更好/更清洁的方法来做到这一点。
我知道硬括号[,]在expect "..."字符串中使用时需要三个反斜杠转义,所以我expect "blah blah \\\[herp derp\\\]"用来准确地将这些字符传达给expectI/O 检查器,但还有哪些其他字符也需要转义?管道?括弧????
这是代码(bash脚本):
echo "Pass for router:"
read -s pass
/usr/bin/expect <<EOD
spawn ssh 192.168.10.1 -l root 'opkg list-installed' > list-installed.txt
#echo @pass
expect "*password:*"
send "$pass\r"
interact
EOD
Run Code Online (Sandbox Code Playgroud)
问题是它什么都不返回。它不会创建本地文件“list-installed.txt”
这可能有什么问题?