Jump to content
MihaiHHH

Bash/SSH + Environment Variables.

Recommended Posts

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 ? 

Link to comment
Share on other sites

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?

  • Upvote 3
Link to comment
Share on other sites

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. 

Link to comment
Share on other sites

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.
  • Thanks 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...