Wielokrotnie piszę skrypty powłoki, które automatyzują pewne czynności.
Z resztą kto tego nie robi. Czasem jednak zdaża się, że w skryptach
potrzebuję wykonać czynność na określonym gemsecie. Np. coś takiego:
1 2 3 4 5 6 7 8 9 |
#!/bin/bash rvm use ruby-1.9.2-p180@moj_gemset rvm info | grep gemset wynik: # Using (...snip...)/gems/ruby-1.9.2-p180@moj_gemset # gemset: "" |
Czyli pokazuje, że przełączyło na odpowiedni gemset jednak następna
komenda już jest wykonywana poza nim.
Mieliście coś takiego?
Otóż przyczyną takiego zachowania jest to, że RVM może działać w dwóch
trybach: binarnie lub skryptowo.
Tryb binarny wykorzystany w skryptach nie potrafi zmienić zmiennych
powłoki a skryptowy tak, z tego powodu występują takie problemy.
Jeżeli zatem chcemy użyć RVM w naszym skrypcie powinniśmy dopisać gdzieś
na początku coś takiego:
1 2 3 4 5 6 7 |
if [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then source "/usr/local/rvm/scripts/rvm" fi # mam zainstalowane RVM globalnie w /usr/local/rvm # jeżeli używamy normalnie to skryptu trzeba szukać w ~/.rvm/scripts/rvm |
Od dzisiaj miną problemy z RVM wykorzystywanym w skryptach :)
.