linux - Executing 'sed' through 'spawn' into a expect script -
i writing simple expect script accessing remote server without introducing password command window.
i able access remote server, , there want modify text file. modification performed 'sed' command finding 'keyword', line 'keyword' located deleted.
the part of code giving me problems combination of 'spawn' 'sed' following one
spawn sed -i -e '/keyword_to_delete/d' /home/my_file
since doing in expec file have through 'spawn' command. switch on debug info mode , main error info in screen :
expect: set expect_out(buffer) "exit\r\nsed: -e expression #1, char 1: unknown command: `''\r\n" cannot interact self - set spawn_id spawned process
i hope have show problem here clear , in nice way, if not tell me , try better.
thanks much
code:
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 sure 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 terminates interact
and current error : "sed: couldn't open temporary file /etc//seddeb2fx: permission denied"
again i'm not expert of
expect
, script looks swawnchmod
,sed
on local machine, not on remote machine. shouldn't usesend chmod 775 ...
instead, you're usingsend exit
executeexit
on remote machine?this how
sed -i ...
works. notice need write permission on/etc
temp file created. avoid need explicitly create temp file not using-i
, eg.sed -e /foo/d /etc/hosts > /tmp/hosts; mv /tmp/hosts /etc
. maybe needcp
instead ofmv
, i'm not sure... i'm lazy trystrace mv ...
myself.
Comments
Post a Comment