2016-06-06 7 views
0

Hier ist mein Code:tmux send-Tasten mit Bash-Skript

#!/bin/sh 
FILE=$1 
while read line; do 
$line 
done < myfile.txt 

Dieser Code soll aus einer Textdatei Zeile für Zeile lesen und auszuführen dann eine tmux senden-Tasten Zeile

Das Problem Die Schlüssel werden gesendet, aber zwischen den an tmux gesendeten Eingaben ist kein Leerzeichen.

Also, wenn ich versuche, in der tmux Sitzung

+0

Warum führen Sie das Skript nicht selbst aus, als '/ bin/sh myfile.txt'? – anishsane

+0

Ich bin mir nicht sicher, was Sie meinen, würde das einen Unterschied machen? Ich bin neu in der Shell/Bash – user6305793

+0

Wenn Sie der Shell ein Dateinamenargument geben, liest es jede Zeile und führt sie aus. So funktionieren Skripte. – Barmar

Antwort

1

Sie benötigen

tmux send keys -t MySession 'Foo Bar' 

Die Ausgabe erscheint als FooBar senden eval verwenden, um den Befehl auszuführen, da Anführungszeichen werden nicht verarbeitet, wenn eine variable Erweiterung . So soll es sein:

eval "$line" 

Aber Ihre ganze Schleife ist so ziemlich gleichwertig

/bin/sh < myfile.txt 

zu tun, weil die Shell das Gleiche tut Ihr Skript tut: jede Zeile lesen und ausführen.

+1

Auch @OP: 'eval '$ line" 'kann immer noch nicht funktionieren, wenn der Befehl nicht mit Newline endet. zB' if ....; then '' commands' 'fi'. Hier, für die explizite Schleifenlogik, muss das gesamte if to fi sein in der gleichen Zeile in myfile.txt .. – anishsane

+0

Das stimmt, aber ich erwarte, dass seine Datei nicht wirklich ein komplexes Skript ist, sondern nur eine Reihe von Einzeilern. – Barmar