title: Expect redirect stdin
body: <p>I'm running a script on a remote server like using this command: </p>
  
  <pre><code>ssh root@host 'bash -s' &lt; script.sh
  </code></pre>
  
  <p>Now I'm trying to use expect to handle the password prompt. This is the script:</p>
  
  <pre><code>#!/usr/bin/expect
  set cmd [lindex $argv 0]
  
  spawn -noecho ssh root@host $cmd
  
  expect {
    "password:" {
       send "password\r"
     }
  }
  </code></pre>
  
  <p>If I run the script, it gives no output:</p>
  
  <pre><code>./ssh.exp 'bash -s' &lt; script.sh
  </code></pre>
  
  <p>I know that's not the way to use ssh without password, but this is not the question right here.</p>
  
  <hr>
  
  <p><strong>UPDATE</strong> I tried the idea of glenn jackman with a simple script but it's not working. This is the script I'm using:</p>
  
  <pre><code>#!/usr/bin/expect
  spawn ssh xxx@xxx
  
  expect "*?assword:*"
  send "pwd\r"
  
  send "echo hello world"
  </code></pre>
  
  <p>This is the output I get:</p>
  
  <pre><code>[xxx@xxx bin]$ expect -d my.exp
  expect version 5.43.0
  argv[0] = expect  argv[1] = -d  argv[2] = my.exp
  set argc 0
  set argv0 "my.exp"
  set argv ""
  executing commands from command file my.exp
  spawn ssh xxx@xxx
  parent: waiting for sync byte
  parent: telling child to go ahead
  parent: now unsynchronized from child
  spawn: returns {7599}
  
  expect: does "" (spawn_id exp6) match glob pattern "*?assword:*"? no
  xxx@xxx's password:
  expect: does "xxx@xxx's password: " (spawn_id exp6) match glob pattern "*?assword:*"? yes
  expect: set expect_out(0,string) "xxx@xxx's password: "
  expect: set expect_out(spawn_id) "exp6"
  expect: set expect_out(buffer) "xxx@xxx's password: "
  send: sending "pwd" to { exp6 }
  send: sending "echo hello world" to { exp6 }
  write() failed to write anything - will sleep(1) and retry...
  </code></pre>
  
  <p><hr>
  <strong>UPDATE</strong> I managed it to get my script to run. This is the result which works:</p>
  
  <pre><code>#!/usr/bin/expect
  
  set user [lindex $argv 0]
  set host [lindex $argv 1]
  set pwd  [lindex $argv 2]
  
  spawn ssh $user@$host bash -s
  
  expect {
    "?asswor?: " {
      send "$pwd\n"
    }
  }
  
  while {[gets stdin line] != -1} {
      send "$line\n"
  }
  send \004
  
  expect {
    "END_TOKEN_OF_SCRIPT" {
      exit 0
    }
    default {
      exit 1
    }
  }
  </code></pre>