标签: expect

在bash脚本中使用expect为SSH命令提供密码

对于那些想要回复我应该使用SSH密钥的人请弃权

我正在尝试在bash脚本中使用expect来提供SSH密码.提供密码是有效的,但我不会像我应该的那样在SSH会话中结束,它会回到海峡.

我的剧本:

#!/bin/bash

read -s PWD

/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com'
expect "password"
send "$PWD\n" 
EOD
echo "you're out"
Run Code Online (Sandbox Code Playgroud)

我脚本的输出:

spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
usr@$myhost.example.com's password: you're out
Run Code Online (Sandbox Code Playgroud)

我想拥有我的SSH会话,只有当我退出它才能返回我的bash脚本.我之前使用bash的原因是因为我使用了一个菜单,我可以选择连接哪个单元.

谢谢

linux ssh bash expect

125
推荐指数
8
解决办法
35万
查看次数

当出现错误时,不要让我手动中止LaTeX编译

正如这里所建议的latexmk那样,只要源更改,就可以方便地连续编译文档.但是,当您处理文档时,通常会出现错误,然后latex在继续之前会发生恐慌并等待用户输入.这可能会非常烦人,特别是最近我latex直接从一个以太网板文件中编译的东西,这会在你输入时不断保存.

如果它无法编译,是否有设置latexlatexmk使其只是中止错误消息?或者,如果有必要,我如何设置某种Expect脚本来自动解除LaTeX的投诉?

(我原以为pdflatex可以选择-halt-on-error诀窍,但显然不是.)

奖金问题:在Mac OSX上浏览是一个不错的pdf查看器,当pdf更改时会自动恢复(与预览不同),除非每当出现乳胶错误时它会再次确认您需要自动清除.Texniscope没有这个问题,但由于其他原因我不得不抛弃Texniscope .有没有办法让Skim始终自动刷新,还是有其他观众可以做到这一点?


增加:latexmk基于这个问题的答案的迷你教程:

  1. 获取latexmk此: http://www.phys.psu.edu/~collins/software/latexmk-jcc/

  2. 将以下内容添加到您的~/.latexmkrc文件中:

    $pdflatex = 'pdflatex -interaction=nonstopmode';
    
    Run Code Online (Sandbox Code Playgroud)

    (对于OS X with Skim)

    $pdf_previewer = "open -a /Applications/Skim.app";
    
    Run Code Online (Sandbox Code Playgroud)
  3. 编辑源文件时,foo.tex在终端中运行以下命令:

    latexmk -pvc -pdf foo.tex
    
    Run Code Online (Sandbox Code Playgroud)
  4. 使用Skim或其他实时pdf查看器查看foo.pdf.对于Skim,只需查看Skim首选项中的"同步"选项卡,并为编辑器进行设置.

瞧!点击保存foo.tex现在将导致foo.pdf刷新而不触及任何东西.

automation latex prompt expect latexmk

65
推荐指数
2
解决办法
2万
查看次数

自动化GDB调试会话的最佳方法是什么?

GDB是否有内置的脚本机制,我应该编写一个期望脚本,还是有更好的解决方案?

我每次都会发送相同的命令序列,我会将每个命令的输出保存到文件中(最有可能使用GDB的内置日志记录机制,除非有人有更好的想法).

scripting automation gdb expect

64
推荐指数
3
解决办法
7万
查看次数

如何通过shell脚本中的命令行传递参数

expect在shell脚本中通过命令行传递参数

我试过这个

#!/usr/bin/expect -f

set arg1 [lindex $argv 0]

spawn lockdis -p
expect "password:" {send "$arg1\r"}
expect "password:" {send "$arg1\r"}
expect "$ "
Run Code Online (Sandbox Code Playgroud)

但它不起作用.请帮我搞清楚.

谢谢

linux bash shell expect

53
推荐指数
4
解决办法
8万
查看次数

使用expect将密码传递给ssh

如何使用expect将密码发送到ssh连接.

说密码是p @ ssword,ssh命令是ssh me@127.0.0.1

如果想要输入密码,我该怎么做呢?

me@127.0.0.1密码:

使用SSH密钥对的正确操作不是一个选项,因为我必须使用ssh(scp)将密钥放在服务器上,这会要求输入密码.

ssh cygwin expect

38
推荐指数
2
解决办法
6万
查看次数

如何在Expect脚本中访问环境变量?

我想在expect脚本中访问PATH环境变量.

我怎样才能做到这一点?

我的实际脚本是:

#!/usr/bin/expect
set timeout 300
send "echo $PATH\r"
Run Code Online (Sandbox Code Playgroud)

它的输出是:

can't read "PATH": no such variable
    while executing
"send "echo $PATH\r""
Run Code Online (Sandbox Code Playgroud)

environment-variables expect

35
推荐指数
2
解决办法
2万
查看次数

在'expect'中使用条件语句

我需要使用expect自动登录到TELNET会话,但我需要为同一个用户名处理多个密码.

这是我需要创建的流程:

  1. 打开到IP的TELNET会话
  2. 发送用户名
  3. 发送密码
  4. 密码错误?再次发送相同的用户名,然后输入不同的密码
  5. 此时应该已成功登录...

对于它的价值,这是我到目前为止所得到的:

#!/usr/bin/expect
spawn telnet 192.168.40.100
expect "login:"
send "spongebob\r"
expect "password:"
send "squarepants\r"
expect "login incorrect" {
  expect "login:"
  send "spongebob\r"
  expect "password:"
  send "rhombuspants\r"
}
expect "prompt\>" {
  send_user "success!\r"
}
send "blah...blah...blah\r"
Run Code Online (Sandbox Code Playgroud)

不用说这不起作用,也不是很漂亮.从我与谷歌的冒险预期似乎是暗艺术的东西.在此事先感谢任何人的帮助!

bash automation telnet expect conditional-statements

25
推荐指数
2
解决办法
6万
查看次数

如何为密码创建期望脚本提示?

我有一个期望脚本通过ssh连接到几个路由器.所有这些路由器都有相同的密码(我知道,这是错误的),脚本需要知道密码才能连接到路由器.目前,密码作为命令行的参数传递给我的脚本,但这意味着我的.bash_history文件以及正在运行的进程中都有该密码的跟踪.因此,如果可能的话,我希望提示用户输入密码.

您是否知道是否可以提示用户输入密码?

谢谢.

编辑:如果我连接到服务器而不是路由器,我可能会使用ssh密钥而不是密码.但我使用的路由器只支持密码.

passwords prompt expect

22
推荐指数
2
解决办法
4万
查看次数

如何在Expect脚本中返回生成的进程退出代码?

我使用expect来运行测试脚本.测试通过退出代码返回成功/失败.但期望返回等效的退出代码.如何让期望返回正确的退出状态?

我的测试是用psql(postgresql命令处理器)运行的sql脚本.由于psql不允许将数据库密码指定为命令行参数,因此期望脚本执行此操作.

所以,我的期望脚本看起来像:

spawn $SPAWN_CMD
expect {
        -re "Enter password for new role:" {
                send "$PWPROMPT\n"
                exp_continue
        } -re "Enter it again:" {
                send "$PWPROMPT\n"
                exp_continue
        } -re "Password(.*)" {
                send "$PASSWORD\n"
                exp_continue
        } -re "Password(.*):" {
                send "$PASSWORD\n"
                exp_continue
        } eof
}
Run Code Online (Sandbox Code Playgroud)

linux shell scripting expect

22
推荐指数
1
解决办法
2万
查看次数

spawn和exec有什么区别?

我正在学习编写TCL(期望)脚本,我注意到一些示例显示使用spawn,而其他示例显示命令exec.我试过谷歌搜索,但找不到有什么区别?

假设我在一个长期预期脚本的中间调用'exec',我可以期待发生什么?

scripting tcl exec expect spawn

21
推荐指数
3
解决办法
2万
查看次数