Strona 1 z 1

[Bash] wytłumaczenie prostego skryptu

: 30 sie 2012, 20:48
autor: maf2
Witam,
Proszę o wytłumaczenie prostego skryptu.

Kod: Zaznacz cały

#!/bin/bash
cd()
{
builtin cd "$@"
echo "$OLDPWD --> $PWD"
}

cd $1 
Wydaję np. polecenie w katalogu /home/tomek/bash o treści:
./funcd test i dostaję wynik:
/home/tomek/bash --> /home/tomek/bash/test
Chodzi o to, że tak jak rozumiem ten skrypt to powinien on przenieść mnie do katalogu /home/tomek/bash/test i wypisać /home/tomek/bash (czyli stary katalog w którym byłem) i /home/tomek/bash/test (katalog w którym obecnie jestem). Problem polega na tym, że ten skrypt nie przenosi mnie do katalogu test tylko wypisuje /home/tomek/bash --> /home/tomek/bash/test a dalej jestem w tym samym katalogu(/home/tomek/bash/)

Jakiś błąd w rozumowaniu pewnie robię i proszę o wytłumaczenie w czym tkwi błąd.

Re: [Bash] wytłumaczenie prostego skryptu

: 30 sie 2012, 21:06
autor: JSokol
Wykonując skrypt w katalogu '/home/tomek/bash' po jego zakończeniu wciąż w nim będziesz.

Skrypt działa tak jak trzeba, bo w trakcie jego działania wchodzi do katalogu 'test' i wyświetla Ci informację gdzie był i gdzie jest po wejściu. Gdybyś w skrypcie po linii odpowiedzialnej za wejściu do folderu 'test' wykonał jeszcze 'touch plik' to zobaczysz, że plik utworzy się nie w katalogu w którym skrypt wywołałeś, tylko już w katalogu test.

Mam nadzieję, że nie zamotałem, tylko rozjaśniłem ;)

Re: [Bash] wytłumaczenie prostego skryptu

: 30 sie 2012, 21:15
autor: maf2
Ok dzięki za pomoc dopisałem touch w skrypcie i działa tak jak piszesz :) Swoją drogą to jak napisać skrypt który zmienia katalogi ?:P

Re: [Bash] wytłumaczenie prostego skryptu

: 30 sie 2012, 21:43
autor: JSokol
maf2 pisze:Swoją drogą to jak napisać skrypt który zmienia katalogi ?:P
Do tego nie trzeba pisać skryptów - wystarczy w terminalu wpisać "cd test" :)
Chyba że ma być to skrypt, który wchodzi do katalogu w jakimś konkretnym celu - wtedy możesz wykorzystać obecny (choć jest on niepotrzebnie "przekombinowany") i po prostu analogicznie do 'touch plik' robić wewnątrz folderu potrzebne rzeczy.

Re: [Bash] wytłumaczenie prostego skryptu

: 30 sie 2012, 23:14
autor: maf2
Ok dzięki. To przykład z książki jest Learning the bash Shell,3rd Edition Cameron Newham

Re: [Bash] wytłumaczenie prostego skryptu

: 31 sie 2012, 19:00
autor: beluosus
Polecenie cd wykonuje w procesie potomnym, który odpowiada za uruchomienie skryptu. Rodzic - w świecie komputerów tak jak i w prawdziwym świecie - nie dziedziczy po dziecku. Jeśli chcesz uruchomić skrypt (a właściwie wykonać polecenia z pliku) na bieżącym środowisku to uruchom go tak:

Kod: Zaznacz cały

source plik
# lub
. plik
Co do samego przykładu to trochę dziwny, nie przejdzie do katalogu ze spacjami i nie wiem dlaczego wszystkie parametry z funkcji przekazuje do cd. Ja bym to tak napisał:

Kod: Zaznacz cały

#!/bin/bash
cd()
{
builtin cd "$1"
echo "$OLDPWD --> $PWD"
}

cd "$1"