Oczywiście możesz ustawić zmienną środowiskową wewnątrz polecenia, jednak musisz uważać na cytowanie: pamiętaj, że twoja powłoka przeanalizuje lokalny wiersz poleceń, a wtedy zdalna powłoka będzie miała ciąg otrzymuje.
Jeśli chcesz, aby zmienna otrzymywała tę samą wartość na serwerze, co na kliencie, wypróbuj SendEnv
opcję:
ssh -o SendEnv = MYVAR server.example.com moja komenda
Wymaga to jednak wsparcia ze strony serwera. W OpenSSH nazwa zmiennej musi być autoryzowana w /etc/sshd_config
.
Jeśli serwer zezwala tylko na określone nazwy zmiennych, możesz obejść to; na przykład pozwala na to wspólna konfiguracja LC_*
i można wykonać następujące czynności:
ssh -o SendEnv = LC_MYVAR server.example.com 'MYVAR = $ LC_MYVAR; rozbrojony LC_MYVAR; eksport MYVAR; moja komenda ”
Jeśli nawet LC_*
nie jest opcją, możesz przekazać informacje do TERM
zmiennej środowiskowej, która jest zawsze kopiowana (może istnieć jednak limit długości). Nadal będziesz musiał upewnić się, że zdalna powłoka nie ogranicza TERM
zmiennej do wyznaczania znanego typu terminala. Przekaż -t
opcję ssh, jeśli nie uruchamiasz zdalnej interaktywnej powłoki.
env TERM = „dodatkowe informacje: $ TERM” ssh -t server.example.com 'MYVAR = $ {TERM%: *}; TERM = $ {TERM ## *:}; eksport MYVAR; moja komenda ”
Inną możliwością jest zdefiniowanie zmiennej bezpośrednio w poleceniu:
ssh -t server.example.com 'export MYVAR = "dodatkowe informacje"; moja komenda ”
Zatem jeśli przekazujesz zmienną lokalną:
ssh -t server.example.com 'export MYVAR =' "'$ LOCALVAR'” '; moja komenda ”
Uważaj jednak na kwestie cytowania: wartość zmiennej zostanie interpolowana bezpośrednio do fragmentu powłoki wykonanego po stronie zdalnej. Ostatni przykład powyżej zakłada, że $LOCALVAR
nie zawiera żadnych pojedynczych cudzysłowów ( '
).