[Bash] wytłumaczenie prostego skryptu

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
maf2
Sędziwy Jeż
Sędziwy Jeż
Posty: 80
Rejestracja: 30 cze 2006, 03:26
Płeć: Mężczyzna
Wersja Ubuntu: 23.10
Środowisko graficzne: GNOME
Architektura: x86_64

[Bash] wytłumaczenie prostego skryptu

Post 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.
Awatar użytkownika
JSokol
Sędziwy Jeż
Sędziwy Jeż
Posty: 67
Rejestracja: 18 mar 2010, 10:57
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: Unity
Architektura: x86_64
Lokalizacja: Down under
Kontakt:

Re: [Bash] wytłumaczenie prostego skryptu

Post 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 ;)
maf2
Sędziwy Jeż
Sędziwy Jeż
Posty: 80
Rejestracja: 30 cze 2006, 03:26
Płeć: Mężczyzna
Wersja Ubuntu: 23.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [Bash] wytłumaczenie prostego skryptu

Post 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
Awatar użytkownika
JSokol
Sędziwy Jeż
Sędziwy Jeż
Posty: 67
Rejestracja: 18 mar 2010, 10:57
Płeć: Mężczyzna
Wersja Ubuntu: 14.04
Środowisko graficzne: Unity
Architektura: x86_64
Lokalizacja: Down under
Kontakt:

Re: [Bash] wytłumaczenie prostego skryptu

Post 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.
maf2
Sędziwy Jeż
Sędziwy Jeż
Posty: 80
Rejestracja: 30 cze 2006, 03:26
Płeć: Mężczyzna
Wersja Ubuntu: 23.10
Środowisko graficzne: GNOME
Architektura: x86_64

Re: [Bash] wytłumaczenie prostego skryptu

Post autor: maf2 »

Ok dzięki. To przykład z książki jest Learning the bash Shell,3rd Edition Cameron Newham
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: [Bash] wytłumaczenie prostego skryptu

Post 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"
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości