cómo ejecutar varias líneas de código dentro de SSH en un script bash

cómo ejecutar varias líneas de código dentro de SSH en un script bash

Quiero ejecutar el siguiente código, pero se resalta el error en el código con rojo en vi. Obteniendo error despuéssudo ssh -t root@$ip << EOFlínea. ¿Dónde he escrito mal?

#!/bin/bash
cassandra_home=$(python -c "import json; print \",\".join(json.load(open('${repair.json}','r'))[\"cassandra_home\"])")
iplist[@]=$(python -c "import json; print \",\".join(json.load(open('${repair.json}','r'))[\"iplist\"])")
for ip in ${iplist[@]}
do
  sudo ssh -t root@$ip << EOF
    for ip in ${iplist[@]} 
    do
      echo Checking $ip for ongoing repairs
      ${cassandra_home}nodetool -h $ip tpstats | grep Repair#
      response=$?
      if [ $response -eq 0 ]; then
        repair_ongoing=true
        echo "Ongoing repair on $ip"
      fi
    done 
    if ! [ $repair_ongoing ]; then
      ## echo "Taking a snapshot."
      ## ${cassandra_home}bin/nodetool -h $ip snapshot
      echo "Starting repair on $ip"
      start=$(date +%s)
      ${cassandra_home}bin/nodetool -h $ip repair -pr -inc -local metadata
      sleep 3
      ${cassandra_home}bin/nodetool -h $ip cleanup metadata 
      end=$(date +%s)
      #echo "ks.tab,st,et,last run,status">>repair_status.csv
      echo "Repair and cleanup completed for metadata in $((end - start)) seconds"
    fi
    exit 0
  EOF
done           

Respuesta1

Usarhttps://www.shellcheck.net/(hay un complemento vim) Te lo diría

Line 18:
  EOF
 ^-- SC1039: Remove indentation before end token (or use <<- and indent with tabs).

Luego pase a enumerar muchas otras cuestiones.

Respuesta2

Está intentando almacenar una matriz de valores en iplist[@]pero como una declaración estática...

Pruebe lo siguiente:

#!/bin/bash
cassandra_home=(`python -c "import json; print \",\".join(json.load(open('${repair.json}','r'))[\"cassandra_home\"])"`)
iplist[@]=(`python -c "import json; print \",\".join(json.load(open('${repair.json}','r'))[\"iplist\"])`)
for ip in ${iplist[@]}
do
  sudo ssh -t root@$ip "
    for ip in ${iplist[@]} 
    do
      echo Checking $ip for ongoing repairs
      ${cassandra_home}nodetool -h $ip tpstats | grep Repair#
      response=$?
      if [ $response -eq 0 ]; then
        repair_ongoing=true
        echo \"Ongoing repair on $ip\"
      fi
    done 
    if ! [ $repair_ongoing ]; then
      ## echo \"Taking a snapshot.\"
      ## ${cassandra_home}bin/nodetool -h $ip snapshot
      echo \"Starting repair on $ip\"
      start=`date +%s`
      ${cassandra_home}bin/nodetool -h $ip repair -pr -inc -local metadata
      sleep 3
      ${cassandra_home}bin/nodetool -h $ip cleanup metadata 
      end=`date +%s`
      #echo \"ks.tab,st,et,last run,status\">>repair_status.csv
      echo \"Repair and cleanup completed for metadata in $end - $start seconds\"
    fi
    exit 0"

done   

información relacionada