2017-12-12 7 views
0

Ich versuche, eine benutzerdefinierte. Bashrc Befehl innerhalb meiner Expect-Skript ausführen, aber es erkennt den Befehl nicht. Dies ist offensichtlich, weil jedes Skript in einer eigenen Shell läuft, aber ich bin nicht in der Lage zu source ~/.bashrc, weil es wieder mit einem invalid command name "-f" kommt (Nicht sicher, wo es das "-f" bekommt). Hat jemand irgendwelche Empfehlungen, wie man das macht? Auch wenn irgendwelche anderen Probleme offensichtlich sind, dann ignoriere sie bitte, da ich diese selbst herausfinden werde, ich brauche nur Hilfe mit dem spawn Befehl.Wie verwende ich. Bashrc Befehl innerhalb erwarten Spawn-Befehl

Unten ist mein erwarten Skript ($ USER & $ PASS aus einem anderen Bash-Skript übergeben)

#!/usr/bin/expect 
log_file expectLog.log ;# 
cd ~/customDirectory 
source ~/.bashrc 
spawn customCommandName param1 param2 
expect -exact "User Name:" 
send -- $USER 
expect -exact "Password:" 
send -- $PASS 
+2

'erwarten' basiert auf TCL, eine völlig andere Programmiersprache. Sie können nicht ~/.bashrc 'in einem' expect'-Skript so weit wie Sie können in einem C++ - oder Java-Programm. Erstellen Sie stattdessen ein Shell-Skript, das Ihren benutzerdefinierten Befehl ausführt, und rufen Sie das als externes Programm auf –

+0

@thatotherguy das funktionierte für mich, danke. –

Antwort

1

Sie benötigen eine interaktive Bash-Shell (das liest die Bashrc) starten die laufen Funktion:

spawn bash -ic "customCommandName param1 param2" 

vergessen Sie nicht, drücken Sie die Eingabetaste, wenn Sachen zu senden:

send -- "$USER\r" 

Woher kommt die Variable $ USER? Wenn es sich um eine Umgebungsvariable handelt, tun Sie dies

send -- "$env(USER)\r" 
+0

Ich habe die Lösung von @ thatotherguy verwendet, aber ich habe auch die Empfehlung zur Umgebungsvariablen verwendet, danke. –

Verwandte Themen