2010-02-04 10 views

Odpowiedz

64

./script.sh zostanie wykonany w podpowłoce, a wprowadzone zmiany będą dotyczyć tylko podrzędnej. Po zakończeniu komendy powłoka podrzędna przechodzi, a więc zmiany.

pozyskiwania plik używając . ./script.sh lub source ./script.sh będzie czytać i wykonywać polecenia z pliku-name argument w bieżącym kontekście powłoki, to znaczy, gdy skrypt jest uruchamiany za pomocą source to działa w ramach istniejącej powłoki, wszelkie zmienne utworzone lub zmodyfikowane przez skrypt pozostanie dostępny po zakończeniu skryptu.

+2

Dobrze, nie znałem tego polecenia 'źródło', dziękuję :) – jwbensley

7

Można napisać funkcję w swoim .profile przełączyć aliasy

function toggle-ruby() { 
    if [ "$1" == "1.9" ]; then 
    alias ruby=/opt/local/bin/ruby1.9 
    else 
    alias ruby=/opt/local/bin/ruby1.8 
    fi 
} 

następnie uruchomić można uruchomić:

toggle-ruby 1.9 

lub

toggle-ruby 1.8 

aby przełączyć iz powrotem .

+1

to jest dobre podejście. dzięki! –

85

Prostą odpowiedzią jest to, że skrypty tworzą nieinteraktywne powłoki i domyślnie opcja expand_aliases jest często wyłączona.

Można rozwiązać ten problem w bardzo prosty sposób, wystarczy dodać następujący wiersz na początku skryptu, aby umożliwić rozbudowę Alias:

shopt -s expand_aliases

Ten problem został podsłuch mnie , więc zrobiłem badania, a następnie napisałem post na blogu, gdy zorientowałem się, jak to naprawić: Post about using alias from within Linux shell scripts.

Oczywiście, zaraz po tym, jak znalazłem tę część, znalazłem to, whil Działa na to, czego potrzebujesz, nie zadziała, jeśli masz podpowłokę w podpowłoce. Wciąż szukam rozwiązania tego problemu, dlatego właśnie natknąłem się na twoje pytanie. W poście na blogu wspominam o tanim hackingu, którego używam do pobrania aliasu w skrypcie powłoki. Nie jest elegancki, ale działa nawet w tym podsystemie z wieloma podsłuchami, jaki mam.

+10

To jest o wiele lepsza odpowiedź niż zaakceptowana. Jeśli wylądowałeś tutaj z wyszukiwania, to prawdopodobnie jest to, czego chcesz. – bahamat

+5

mimo że nie jest to tym, co zamierzał PO, to właśnie tego szukałem! dzięki –

+0

Perfect. To znacznie lepiej niż zaakceptowana odpowiedź. – Qix

7

Jeśli potrzebujesz zmienić wersje Ruby, spróbuj rvm.

+0

A w Linuksie, "update-alternatives" dla innych plików wykonywalnych w ogóle. Najwyraźniej nie w OS X: http://apple.stackexchange.com/questions/76704/how-to-set-alternatives-in-10-8 –

Powiązane problemy