dark_nite77
dark_nite77

Reputation: 89

Expect: How to use "ls -d filename" for full path name in expect?

I am trying to automate loading of image on the hardware using expect. For that I need to get full path of the image.

I am using the following syntax -

spawn ls -d $env(PWD)/build/image/bmxs.*bin
expect -re {(\S+)(\r)}
set imgpath $expect_out(1,string)

The message I get is -

spawn: returns {51875}

expect: does "" (spawn_id exp4) match regular expression "(\S+)(\r)"? no

So, it appears that the spawn does not return anything.

I've tried various syntaxes, but no use -

send "ls -d $env(PWD)/build/images/final/nxos.*bin\r"
spawn "ls -d $env(PWD)/build/image/bmxs.*bin"
puts "$LS" ### where $LS is the command.

None of these work. Am I making a mistake?

Upvotes: 0

Views: 411

Answers (1)

Colin Macleod
Colin Macleod

Reputation: 4372

Your code suggests that

  1. the image file is local - on same machine where you run Expect
  2. You want the first file which matches the pattern

If this is so, you can just do

set files [glob $env(PWD)/build/image/bmxs.*bin]
set imgpath [lindex [lsort $files] 0]

On the other hand, the phrase "on the hardware" suggests that this image file is on some remote system. If so, and you already have spawned a login session there, you need to send the ls command on the existing session and then expect the output from ls. However in that case it looks strange to get the directory from $env(PWD)" as this will read the environment variable PWD on your local machine.

Upvotes: 1

Related Questions