MihaiHHH Posted December 18, 2019 Report Posted December 18, 2019 Problema: 1. Se dau cateva masini virtuale (centOS) conectate la cate un server extern windows. (problema apare dupa ultimul widows update). 2. In serverul extern am un .bashrc care defineste niste variabile. 3. Daca fac ssh din masina virtuala si dau echo la variabilele de acolo. totul e ok. (Ex: 1. ssh user@dom 2. (in server) echo $X. 4. Am nevoie sa pornesc niste scripturi care fac ssh din masina virtuala in server si din pacate nu gasesc acele variabile. (Ex: 1. ssh user@dom perl - e 'echo $X' [X o sa fie undefined aici desi e in bashrc]. Ce am incercat pana acum: Am citit despre diferitele tipuri de shell pe care ssh le deschide (interactive/non-interactive) si am intelese ca in functie de ce tip este, unele initializeaza .bashrc si altele .bash_profile insa in bash_profile am setat ca in cazul in care ajunge acolo sa faca source la .bashrc Idei ? Quote
Zatarra Posted December 18, 2019 Report Posted December 18, 2019 Bossu depinde cum ai nevoie sa le folosesti. 1. Daca vrei sa folosesti in bash scripting (fara perl/python sau alte mizerii) - Declari in .bashrc variabla gen: BLABLA=69 - Apelezi sshu: [root@megatron ~]# ssh testcrap "echo \$BLABLA" 69 [root@megatron ~]# 2. Daca vrei sa folosesti in alte limbaje de programare perl (in cazul tau) - Tre sa ii dai export, adica in .bashrc in loc sa ai BLABLA=69 o sa ai export BLABLA=69 - Trebuie sa "incarci" .bashrc-ul inainte sa apelezi variabilele deoarece rulezi un non-interactive shell (vezi ca am mai adaugat un ."\n" care iti adauga o linie noua dupa ce afiseaza variabila si mai ai si ceva escapari pe acolo dar na.. te prinzi tu [root@megatron ~]# ssh testcrap "source ~/.bashrc && perl -e 'print \$ENV{BLABLA}.\"\n\";'" 69 [root@megatron ~]# Alles gut? 3 Quote
MihaiHHH Posted December 18, 2019 Author Report Posted December 18, 2019 25 minutes ago, Zatarra said: Bossu depinde cum ai nevoie sa le folosesti. 1. Daca vrei sa folosesti in bash scripting (fara perl/python sau alte mizerii) - Declari in .bashrc variabla gen: BLABLA=69 - Apelezi sshu: [root@megatron ~]# ssh testcrap "echo \$BLABLA" 69 [root@megatron ~]# 2. Daca vrei sa folosesti in alte limbaje de programare perl (in cazul tau) - Tre sa ii dai export, adica in .bashrc in loc sa ai BLABLA=69 o sa ai export BLABLA=69 - Trebuie sa "incarci" .bashrc-ul inainte sa apelezi variabilele deoarece rulezi un non-interactive shell (vezi ca am mai adaugat un ."\n" care iti adauga o linie noua dupa ce afiseaza variabila si mai ai si ceva escapari pe acolo dar na.. te prinzi tu [root@megatron ~]# ssh testcrap "source ~/.bashrc && perl -e 'print \$ENV{BLABLA}.\"\n\";'" 69 [root@megatron ~]# Alles gut? Mersi de explicatie, trebuie totusi sa explic ca nu de acolo e problema pentru ca faceam export la variabile. Ce am reusit sa fac ulterior e sa vad ca in .bashrc aveam linia asta inainte de declararea variabilelor mele " [[ "$-" != *i* ]] && return " care din cate inteleg, daca sesiunea e non-interactive opreste scriptul. Am sters statementul ala si vad ca ce incercam eu sa fac merge acum. Acum ma documentez sa vad cat de important este acest check (din cate inteleg are de a face cu scp transferand fisier pe ssh) Din nou, mersi mult totusi. Quote
Zatarra Posted December 18, 2019 Report Posted December 18, 2019 Np. Linia aia verifica daca shellu e interactive sau nu [root@megatron ~]# ssh testcrap 'echo $-' hBc [root@megatron ~]# [root@testcrap ~]# echo $- himBHs [root@testcra ~]# h: Remember the location of commands as they are looked up for execution. This is enabled by default. i: interactive m: Monitor mode. Job control is enabled B: The shell performs brace expansion (see Brace Expansion above). This is on by default H: Enable ! style history substitution. This option is on by default when the shell is interactive. 1 Quote