2013-07-10 36 views
5

muszę używać zdalnego zmiennej i zmiennej lokalnej w tym samym zdalne polecenia sshssh i zmienne środowisko zdalne i lokalne

export CASSANDRA_DIR=/opt/cassandra 

ssh [email protected] <<\EOF 
    export READ=$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}') 
    echo "listen_address: $READ" to directory "$CASSANDRA_DIR" 
EOF 

Zmienna $ ZOBACZ działa dobrze, natomiast CASSANDRA_DIR nie działa. Poniższy zadziała CASSANDRA_DIR

ssh [email protected] echo "directory=$CASSANDRA_DIR" 

dzięki, Dean

+0

Gdzie jest zdefiniowana zmienna '$ CASSANDRA_DIR'? –

+0

Edytowałem post, aby to dodać. Pochodzi z tego skryptu (cóż, w rzeczywistości jest nieco bardziej skomplikowany, ale dla wszystkich intensywnych celów jest w zasadzie ustawiony w lokalnym skrypcie, a nie w odległym.) Używam też "clush", który uruchamia polecenie ssh na wielu serwerach, ale ssh nie działa, więc cmd nie działa. –

+0

Drobne nitowanie: 'grep ... | awk ...' zawsze może być połączone jako: 'awk -F = '/ IPADDR /' {wydrukuj $ 2 } "/ etc/sysconfig/network-scripts/ifcfg-eth0' –

Odpowiedz

9

Jaki powinien być rozszerzony lokalnie, utrzymywać sigil $ jak jest jak $foobar

Co chcesz zostać rozszerzona zdalnie, można użyj ukośników odwrotnych: \$foobar

Domyślnie w tutaj-docs zmienna jest rozwijana re.

Przykł. :

cat<< EOF 
$UID 
EOF 

Aby uniknąć rozszerzenia w tutaj-doc, można użyć tego formularza:

cat<< 'EOF' 
$variable_that_will_not_been_expanded 
EOF 

lub Twoja:

cat<< \EOF 
$variable_that_will_not_been_expanded 
EOF 

obie prace.

+0

Dodałem do mojego skryptu ssh powyżej linii echo dir1 = $ CASSANDRA_DIR echo dir2 = \ $ CASSANDRA_DIR i żaden z wydrukowanych katalogów nie znalazł rozwiązania. –

+1

dzięki, to naprawiło mnie wszystkich !!!! wow, po prostu usunięcie tego "\" przed EOF jest tym, co naprawiło mój problem, więc mam teraz \ $ REMOTE_VAR i $ ORIGINAL_HOST_VAR i oba działają, jeden czyta lokalnie, a drugi czyta zdalny. –

1

Jeśli nie chcesz korzystać z tu-doc można zrobić to w ten sposób:

export CASSANDRA_DIR=/opt/cassandra 

ssh [email protected] " 
    export READ=\$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= \'{print \$2}\') 
    echo \"listen_address: \$READ\" to directory \"$CASSANDRA_DIR\" 
" 
+0

Naprawdę staram się sprawić, by działał z humorem h EOF taki, że skrypt jest dużo łatwiejszy do odczytania, ponieważ to co jest w EOF może czasami wynosić 10 linii. Czy nie ma sposobu pracy z EOF, aby użyć zmiennych lokalnych? –

+1

plus 1 na twoim wpisie, ponieważ pomógł mi on połączyć twoją odpowiedź i sputnicks odpowiedź do mojego końcowego wyniku. –

+0

Cieszę się, że mogłem pomóc w pewien sposób :) –

1

Mój wynik końcowy jest więc, który działa świetnie (zawiadomienie I cahnge \ EOF do EOF zamiast !!! !! a następnie uciec zmiennych zdalnych

export CASSANDRA_DIR=/opt/cassandra 

ssh [email protected] <<EOF 
    export READ=$(grep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth0 |awk -F= '{print $2}') 
    echo "listen_address: \$READ to directory $CASSANDRA_DIR" 
EOF 

to wszystko działa świetnie w tej ZOBACZ generowany jest zdalnie i CASSANDRA_DIR jest var na mojej oryginalnej maszyny.

Dean