het uitvoeren van script met behulp van SSH in een lus

Ik probeer een script te schrijven, waarbij ik een lus heb om in te loggen op meerdere externe machines en een script in elke machine uit te voeren. Hier is een voorbeeld:

for ((j=1; j < 2; j++)); do 

  mchname="n"$j

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
  ENDSSH

done

Telkens wanneer ik het bovenstaande script probeer uit te voeren krijg ik: "warning: here-document op regel 37 begrensd door end-of-file (gezocht` ENDSSH ') "

Ik ben nieuw voor ssh, dus ik weet zeker dat ik een dwaze fout maak. Kan iemand me een oplossing voorstellen? Bedankt.

1

1 antwoord

Er is een probleem in je bash-script. De heredoc-eindtag (ENDSSH in uw script) kan niet worden ingesprongen.

Probeer dit in plaats daarvan:

  ssh -T $mchname <<'ENDSSH'    
    ./run_script < input > output &    
ENDSSH
# ^ no indentation for that line

Bewerken

U kunt ook een opdracht uitvoeren op het externe systeem door deze als een argument aan ssh door te geven in plaats van deze als standaardinvoer te gebruiken. De opdracht wordt uitgevoerd door de externe shell van de gebruiker:

ssh -T $mchname './run_script < input > output &'
11
toegevoegd
Als u '<< -' gebruikt in plaats van '<<' voor het hier beschreven document, worden eventuele voorlooptabs (alleen tabbladen, niet willekeurige witruimten) van het hier beschreven document en de eindtag verwijderd, zodat u ze natuurlijker kunt inspringen.
toegevoegd de auteur chepner, de bron
En -T is de standaardwaarde wanneer u ssh een expliciete opdracht geeft om uit te voeren, dus ssh $ mchname './run_script <input> output &' .
toegevoegd de auteur dave4420, de bron
Hartelijk bedankt! Ik zou dat nooit hebben gevangen!
toegevoegd de auteur user1477337, de bron