Chcę uruchomić skrypt, aby po prostu zmienić bieżący katalog roboczy:
#!/bin/bash
cd web/www/project
Ale po uruchomieniu bieżący pwd pozostaje niezmieniony! Jak mogę to zrobić?
bash
scripting
environment-variables
cd-command
Sony Santos
źródło
źródło
return
aby uciec od skryptu pochodzącego w ten sposób, a nieexit
- są one jak funkcje powłoki iexit
opuszczą powłokę, z której pochodzi skrypt.source ./script
taki sam?.
isource
są równi w bash. 2. nie musimy używać./
przed nazwą pliku, jeśli znajduje się w tym samym katalogu. Można uruchomić tylko to:. script
W przypadku małych zadań, takich jak to, zamiast tworzyć skrypt, utwórz taki alias,
Powinieneś dodać to do swojego
.bashrc
pliku, jeśli chcesz ustawić dla każdej interaktywnej powłoki.Teraz możesz uruchomić to jako
$ cdproj
.źródło
eval `./script`
lubeval $(./script)
wykonać te polecenia. Jest to powszechne podejście do poleceń, które muszą zaktualizować środowisko powłoki wywołującej.eval
podejście.Użyj
exec bash
na końcuJednak to pytanie jest często zadawane, ponieważ chce się pozostać w wierszu polecenia bash w określonym katalogu po wykonaniu skryptu bash z innego katalogu.
W takim przypadku po prostu uruchom podrzędną instancję bash na końcu skryptu:
To tworzy nową podpowłokę. Wpisz,
exit
aby powrócić do pierwszej powłoki, w której skrypt został początkowo uruchomiony.źródło
exec
jest zwykle uważane za ostateczność łajdaka .. :)exit
(lub Ctrl + D), musisz to zrobić 11 do 21 razy. (2) Kolejną wadą używania skryptu wykonywalnego jest to, że jeśli ustawisz jakieś opcje powłoki (np.dotglob
Lubglobstar
) w interaktywnej sesji powłoki, stracisz je, ponieważ zaczynasz nową powłokę.Chociaż istnieją odpowiedzi, które wykonują dokładnie taką akcję, jaką chcesz, bardziej standardową metodą do tego celu jest utworzenie dowiązania symbolicznego:
Następnie możesz
cd
przejść do katalogu, używając nazwyproj
:Ta metoda jest bardziej elastyczna, ponieważ można uzyskać dostęp do plików przy użyciu krótkiej nazwy bez
cd
:źródło
Jeśli zmienisz pomiędzy katalogami daleko w systemie plików. Polecam autojump .
źródło
W zależności od tego, co zamierzasz zrobić, innym rozwiązaniem może być utworzenie funkcji zamiast skryptu.
Przykład:
Utwórz funkcję w pliku, powiedzmy
/home/aidin/my-cd-script
:Następnie dołącz go do swojego
bashrc
lubzshrc
pliku:Teraz możesz używać go jak polecenia:
źródło
Dlaczego nie użyć „exec”, to robi dokładnie to, co chcę.
źródło
exit
(lub Ctrl + D), musisz to zrobić 11 do 21 razy.dotglob
Lubglobstar
), stracisz je, ponieważ zaczynasz nową powłokę. … (Ciąg dalszy)Możesz to zrobić za pomocą funkcji lub za pomocą && Przykłady poniżej instalują Zabbix i tworzą plik z linią w nim zawartą.
Dawny:
lub:
źródło