簡體   English   中英

通過“派生”執行“ sed”到期望腳本中

[英]Executing 'sed' through 'spawn' into a expect script

我正在編寫一個簡單的Expect腳本,用於訪問遠程服務器,而無需在命令窗口中引入密碼。

我能夠訪問遠程服務器,並且我要在其中修改文本文件。 使用“ sed ”命令執行此修改以查找“關鍵字”,刪除了該“關鍵字”所在的行。

代碼中給我帶來麻煩的部分是“ 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 ,但你的腳本看起來swawn chmodsed 本地機器上,而不是你的遠程機器上。 您不應該使用send chmod 775 ...來代替,就像您使用send exit exit在遠程計算機上執行exit嗎?

  2. sed -i ...工作方式是這樣 您會注意到,您需要對/etc創建臨時文件的寫許可權。 為了避免這種情況,您需要通過不使用-i顯式創建一個臨時文件。 sed -e /foo/d /etc/hosts > /tmp/hosts; mv /tmp/hosts /etc sed -e /foo/d /etc/hosts > /tmp/hosts; mv /tmp/hosts /etc 也許您需要cp而不是mv ,但是我不確定...我太懶了,無法自己嘗試strace mv ...

單引號對Tcl沒有特殊含義(這是具有特殊含義的內容 ),因此您需要

spawn sed -i -e {/keyword_to_delete/d} /home/my_file

抱歉,我不太熟悉Expect expect(1)因為我直接將SSH用於此類任務:

ssh user@remote_server "sed -i -e '/keyword/d' /home/my_file"

如果您確實需要將expect與telnet或其他東西一起使用,該如何做:將sed腳本保存在remote_server中的某個位置,例如/usr/local/bin/del_kw.sh ,然后按/usr/local/bin/del_kw.sh執行。 我認為這是解決問題的更可管理的方法。 有什么原因不能使用這種方法,例如。 因為您的系統安裝在只讀rootfs上?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM