对于那些想要回复我应该使用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的原因是因为我使用了一个菜单,我可以选择连接哪个单元.
谢谢
正如这里所建议的latexmk那样,只要源更改,就可以方便地连续编译文档.但是,当您处理文档时,通常会出现错误,然后latex在继续之前会发生恐慌并等待用户输入.这可能会非常烦人,特别是最近我latex直接从一个以太网板文件中编译的东西,这会在你输入时不断保存.
如果它无法编译,是否有设置latex或latexmk使其只是中止错误消息?或者,如果有必要,我如何设置某种Expect脚本来自动解除LaTeX的投诉?
(我原以为pdflatex可以选择-halt-on-error诀窍,但显然不是.)
奖金问题:在Mac OSX上浏览是一个不错的pdf查看器,当pdf更改时会自动恢复(与预览不同),除非每当出现乳胶错误时它会再次确认您需要自动清除.Texniscope没有这个问题,但由于其他原因我不得不抛弃Texniscope .有没有办法让Skim始终自动刷新,还是有其他观众可以做到这一点?
latexmk基于这个问题的答案的迷你教程:获取latexmk此: http://www.phys.psu.edu/~collins/software/latexmk-jcc/
将以下内容添加到您的~/.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)编辑源文件时,foo.tex在终端中运行以下命令:
latexmk -pvc -pdf foo.tex
Run Code Online (Sandbox Code Playgroud)使用Skim或其他实时pdf查看器查看foo.pdf.对于Skim,只需查看Skim首选项中的"同步"选项卡,并为编辑器进行设置.
瞧!点击保存foo.tex现在将导致foo.pdf刷新而不触及任何东西.
GDB是否有内置的脚本机制,我应该编写一个期望脚本,还是有更好的解决方案?
我每次都会发送相同的命令序列,我会将每个命令的输出保存到文件中(最有可能使用GDB的内置日志记录机制,除非有人有更好的想法).
我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)
但它不起作用.请帮我搞清楚.
谢谢
如何使用expect将密码发送到ssh连接.
说密码是p @ ssword,ssh命令是ssh me@127.0.0.1
如果想要输入密码,我该怎么做呢?
me@127.0.0.1密码:
?
使用SSH密钥对的正确操作不是一个选项,因为我必须使用ssh(scp)将密钥放在服务器上,这会要求输入密码.
我想在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) 我需要使用expect自动登录到TELNET会话,但我需要为同一个用户名处理多个密码.
这是我需要创建的流程:
对于它的价值,这是我到目前为止所得到的:
#!/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)
不用说这不起作用,也不是很漂亮.从我与谷歌的冒险预期似乎是暗艺术的东西.在此事先感谢任何人的帮助!
我有一个期望脚本通过ssh连接到几个路由器.所有这些路由器都有相同的密码(我知道,这是错误的),脚本需要知道密码才能连接到路由器.目前,密码作为命令行的参数传递给我的脚本,但这意味着我的.bash_history文件以及正在运行的进程中都有该密码的跟踪.因此,如果可能的话,我希望提示用户输入密码.
您是否知道是否可以提示用户输入密码?
谢谢.
编辑:如果我连接到服务器而不是路由器,我可能会使用ssh密钥而不是密码.但我使用的路由器只支持密码.
我使用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) 我正在学习编写TCL(期望)脚本,我注意到一些示例显示使用spawn,而其他示例显示命令exec.我试过谷歌搜索,但找不到有什么区别?
假设我在一个长期预期脚本的中间调用'exec',我可以期待发生什么?