Come posso inviare lo stdout di un comando a un input Expect?


0

Voglio scrivere una shell + prevedono uno script che riempia automaticamente le mie password tramite l'utilità CLI LastPass lpass. Non sono sicuro di come eseguire l'invio della password restituita lpassall'inserimento della password in uno script di attesa.

Finora lo script prevede qualcosa di simile:

# The beginning isn't important
expect -exact "\r
Please enter your username and password.\r
Username:"
send -- "my-username\r"
expect -exact "my-username\r
Password:"
send -- $(lpass show --password service\ im\ connecting\ to)
expect -exact "\r
# The rest of the expect script follows

Non sono sicuro di come debba essere scritto il bit in $ (...) ...

Risposte:


2

Si desidera utilizzare la execfunzione nello expectscript per ottenere lo stesso comportamento $(...)della shell

Vedi l'esempio seguente:
Usiamo il programma esterno di 4expect.shseguito che alimenteremo con lo expectscript:

#!/bin/sh
# Test program : let set filename as "4expect.sh"
# in the same directory where expect script will work

echo; read -p 'question: ' answer
echo "Got answer:>${answer}<"

E qui il nostro expectscript che aspettare per "domanda" da programma esterno e alimentarlo con i file nella directory corrente totale (ottenere l'output dei programmi esterni lse egrep) che verrà utilizzato da expect's send:

#!/usr/bin/expect -f

spawn -noecho ./4expect.sh
expect -re "question" { send -- [exec ls -la . | egrep "^total" ]\r }
interact

puts "\nDone.\n"
exit

Il problema non è ottenere lpass per restituire la password a stdout - il comando lpass che ho dato nell'esempio lo fa. È come catturare quello stdout e sendfarlo in uno script di attesa. Non ho trovato che $ (...) negli script previsti funzioni come nei normali script di shell.
Giosia

1
Ohh, amico ... mi dispiace davvero, ho completamente frainteso la tua domanda. Ho rimosso la mia risposta precedente poiché era irrilevante e l'ho sostituita con la risposta corretta. Duh ...
Alex,

Abbinalo a questo per gestire cose come il tuo pass SUDO. stackoverflow.com/questions/681928/… . Ora posso automatizzare tutti i miei accessi. fantastico!
Giosia
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.