
Lassen Sie mich zunächst meine Situation erklären. Ich habe einen Alias in .bashrc:
doscript () { ssh root@server$1 -p2202 "bash -s" < ~/scripts/$2 $3; }
Ich habe ein Skript, das im Wesentlichen aus mehreren Aktionen besteht, wie:
check current settings
read comment
do actions
write $comment in a file
restart service
Also führe ich einen Befehl aus
doscript server scriptname parameter
Der Teil „Kommentar lesen“ funktioniert jedoch nicht. Anstatt zu warten, bis ich den Kommentar eingebe, wird er sofort ausgeführt und fügt der Kommentardatei nichts hinzu.
Gibt es in diesem Fall eine Möglichkeit, eine Variable einzugeben?
Antwort1
Der übliche Weg, dies zu tun, ohne zu viel zu ändern, besteht darin, die Datei auf die Remote-Maschine zu kopieren und sie dann auszuführen, wodurch stdin für Ihre TTY-Eingabe verfügbar bleibt. Beispiel:
scp -P 2202 ~/scripts/$2 root@server$1:./myscript
ssh -t root@server$1 -p2202 bash ./myscript $3
oder wenn Sie scp
diese Zeile nicht ersetzen können durch
ssh root@server$1 -p2202 'cat >./myscript' <~/scripts/$2