gpt4 book ai didi

linux - 将 'sed' 到 'spawn' 执行到预期脚本中

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:14 24 4
gpt4 key购买 nike

我正在编写一个简单的 expect 脚本 来访问远程服务器,而无需在命令窗口中引入密码。

我可以访问远程服务器,我想在那里修改一个文本文件。这个修改是用'sed'命令执行的,用于查找'keyword',这个'keyword'所在的行被删除。

给我问题的代码部分是“spawn”与“sed”的组合,如下所示

spawn sed -i -e '/keyword_to_delete/d' /home/my_file

由于这是在 expec 文件中进行的,因此我必须通过“spawn”命令来进行。我打开调试信息模式,屏幕上的主要错误信息是:

expect: set expect_out(buffer) "exit\r\nsed: -e expression #1, char 1: unknown command: `''\r\n"
cannot interact with self - set spawn_id to a spawned process

我希望我已经清楚且以一种很好的方式在这里展示了问题,如果没有告诉我,我会尽力做得更好。

非常感谢

代码:

 set ip [lindex $argv 0]

set port [lindex $argv 1]

set password <PSWD>


proc sendPass {} {

global ip
global port
global password

spawn "/usr/bin/ssh" -X -p $port root\@$ip "-o StrictHostKeyChecking no" "-o UserKnownHostsFile /dev/null"

while {1} {
expect {
"IN" {break}
"Are you sure you want" {send "yes\r"}
"assword" {send "$password\r"}
}
}

spawn chmod 775 /etc/hosts
spawn sed -i -e {/operator/d} /etc/hosts
spawn sed -i -e {/default/d} /etc/hosts

send "exit\r"
expect eof

}; # end proc sendPass

#execute proc
sendPass


# script itself terminates
interact

当前错误是:“sed:无法打开临时文件/etc//sedDEb2Fx:权限被拒绝”

最佳答案

  1. 同样,我不是 expect 专家,但您的脚本看起来会在您的 上生成 chmodsed >local 机器,而不是在您的远程机器上。您不应该使用 send chmod 775 ... 来代替,就像您使用 send exit 在您的远程机器上执行 exit 一样吗?

  2. This is how sed -i ... works .您会注意到您需要对将创建临时文件的 /etc 具有写入权限。为避免这种情况,您需要不使用 -i 显式创建一个临时文件,例如。 sed -e/foo/d/etc/hosts >/tmp/hosts; mv/tmp/hosts/etc.也许你需要 cp 而不是 mv,但我不确定...我懒得尝试 strace mv ...由我自己。

关于linux - 将 'sed' 到 'spawn' 执行到预期脚本中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9619290/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com