Korzystam z komputerów w mojej szkole i chciałbym ich używać zsh
zamiast bash
. Chciałbym ustawić ją jako domyślną powłokę, ale nie mogę uruchomić polecenia, na przykład $ chsh -s $(which zsh)
dlatego, że nie mam uprawnień administratora.
Czy istnieje sposób, w jaki mogę umieścić coś w sobie .bashrc
lub coś, co automatycznie wywołuje, zsh
gdy otworzy się to jako obejście?
Aby wyjaśnić, zsh
jest już zainstalowany.
zsh
w.bashrc
pliku. Wyloguj się i zaloguj i gotowe!zsh
pierwszy wiersz?bash
zostanie wywołane jawnie. Lepiej umieść to w.bash_profile
zamian.Odpowiedzi:
Utwórz
.bash_profile
w swoim katalogu domowym i dodaj następujące wiersze:Aktualizacja:
.profile
może działać jako ogólne rozwiązanie, gdy domyślną powłoką nie jest bash. Nie jestem pewien, czy.profile
Zsh może go również wezwać, że może stać się zbędny, ale możemy to zrobić bezpiecznie za pomocą prostej kontroli:Możemy również użyć,
which
aby uzyskać ścieżkę dynamiczną,zsh
której wartość zależy od$PATH
:źródło
.bash_profile
przypadku nie można się do niego odwoływać. Co powiesz na to.profile
zamiast tego?.profile
nie zadziałał. Nie.profile
zadzwoniłby teżZsh
? To może stać się zbędne. Jeszcze tego nie sprawdziłem. (Aktualizacja: Teraz działało, nie jestem pewien, jaki błąd popełniłem wcześniej.) Czy są jakieś przemyślenia na temat możliwych wad używania.profile
?.profile
wtedy,.bash_profile
gdy nie istnieje (chyba że ręcznie je źródłeś.bash_profile
, oczywiście). Konkretnie, źródła bash pierwszy plików [.bash_profile
>.bash_login
>.profile
] znajdzie. Wygląda tylko na.profile
funkcję zgodności z POSIX (powłoką Bourne'a).zsh
..bash_profile
i.profile
nie działało (pliki nawet nie zostały wykonane, Fedora 26 na komputerze uniwersyteckim).Zwykle możesz używać go
chsh
jako użytkownik inny niż root. Ale czasami jest wyłączana, zwykle w witrynach korzystających z jakiejś formy sieciowej bazy danych użytkowników, takich jak NIS i LDAP. Zamiast tego może występowaćypchsh
(NIS) lubchsh.ldap
(LDAP).chsh
zazwyczaj zezwalają tylko na niektóre zatwierdzone powłoki, zazwyczaj te wymienione w/etc/shells
.Jeśli nie możesz używać
chsh
lub jego wariantów na swojej stronie,exec
ustaw swoją powłokę logowania w swojej ulubionej powłoce i ustawSHELL
zmienną tak, aby wskazywała twoją ulubioną powłokę.Jeśli Twój login shell jest
sh
,dash
alboksh
: plik trzeba edytować to~/.profile
. Uważaj, aby ten plik był czytany na początku sesji interaktywnej, a także przez niektóre nieinteraktywne skrypty uruchamiania sesji (np. Dla sesji X11), więc musisz uważać: wywoływaćexec
(zastępuje bieżący proces), gdy bieżący powłoka jest interaktywna. Z wyjątkiem powłoki Bourne'a (/bin/sh
Solaris 10 i wcześniejszych), można stwierdzić, że powłoka jest interaktywna dzięki obecnościi
na liście opcji ($-
).Jeśli chcesz, aby zsh Cię przeczytał
.zprofile
, podaj tę-l
opcję.Jeśli twoja powłoka logowania jest
bash
, możesz postępować jak wyżej. Alternatywnie możesz wprowadzić te polecenia~/.bash_profile
. Większość skryptów uruchamiania sesji tylko czyta~/.profile
i nie~/.bash_profile
, ale widziałem niektóre, które działają w trybie bash i read.bash_profile
, więc nawet tam powinieneś uważać, aby nie wywoływaćexec
powłoki nieinteraktywnej.Jeśli twoja powłoka logowania to csh lub tcsh, zobacz przykład w Zmiana domyślnej powłoki bez uprawnień chsh lub administratora
źródło
Wierzę, że polecenie
chsh
jest właśnie w tym celu. Chociaż nie jestem pewien, czy każda dystrybucja Linux / Unix to obsługuje. Sprawdź stronę podręcznika użytkownikachsh
.źródło
passwd -s
.Jeśli nie możesz uruchomić,
chsh
ponieważ nie masz uprawnień administratora, porozmawiaj z kimś, kto ma uprawnienia .Najprawdopodobniej nie można użyć go
chsh
jako użytkownika innego niż root, ponieważ używany system jest skonfigurowany tak,chsh
aby nie działał, na przykład ponieważ system używa NIS lub LDAP, a nie tylko/etc/passwd
pliku. A może administrator twojego systemu chce po prostu zachować kontrolę.Procedura zmiany powłoki zależy od zasad organizacji. Może istnieć polecenie lokalne, które robi to, co
chsh
zwykle. Lub może być konieczne przesłanie zgłoszenia do pomocy technicznej z prośbą o zmianę powłoki.Większość pozostałych odpowiedzi jest dobra, ale jeśli administratorzy reagują dość szybko, możesz nie chcieć kłopotać się włamywaniem skryptów startowych. Prawdopodobnie
zsh -l
po zalogowaniu wywołam ręcznie, dopóki administrator nie zacznie aktualizować mojego konta.Kolejna rzecz, o której należy pamiętać: czasami różne powłoki mogą korzystać z tych samych plików startowych. Na przykład,
sh
abash
może obie wykonać$HOME/.profile
, acsh
itcsh
może zarówno wykonać$HOME/.login
i$HOME/.cshrc
(choć powłoka specyficzne pliki startowe, takie jak.bashrc
,.bash_profile
i.tcshrc
może zastąpić tych). Jeśli twoją domyślną powłoką jest/bin/csh
i chcesz użyć/bin/tcsh
, zaktualizowanie twojego.login
invoke/bin/tcsh -l
może stworzyć nieskończoną pętlę.zsh
nie zdarza siębash
uruchamiać plików startowych specyficznych dla użytkownika, więc nie stanowi to problemu.Większość muszle ustawić zmienne, które identyfikują który Shell używasz (
$BASH_VERSION
,$tcsh
,$ZSH_VERSION
). Jeśli zamierzasz napisać kod startowy, aby wywołać preferowaną powłokę, nie jest złym pomysłem, aby umieścić go wif
tak, aby był wykonywany tylko wtedy, gdy nie korzystasz już z tej powłoki. Za pomocą kodu z odpowiedzi konsoli konsolebox :(Dodana komplikacja sprawdzania
"${ZSH_VERSION:-unset}"
zamiast tylko"$ZSH_VERSION"
pozwala na to, że już to zrobiłeśset -o unset
, opcję, która powoduje, że odwołanie do niezdefiniowanej zmiennej jest błędem).źródło
Mogę wymyślić kilka scenariuszy.
zsh
nie jest włączony/etc/shells
, a OP chce go używać bez konieczności wpisywaniazsh
w wierszu polecenia. Możliwe rozwiązania.a) użyj sztuczek profilowych, aby wykonać go podczas logowania. Jest to tak samo skuteczne, jak zmiana powłoki.
b) prosić administratora, aby dodać
zsh
do/etc/shells
tak możnachsh
go doc) błagaj administratora, aby zmienił twoją powłokę. nie jest to mądre, ponieważ spowoduje to utratę możliwości wejścia
ftp
. Możesz użyć tylko,ftp
jeśli masz w sobie powłokę/etc/shells
użytkownik chce uciec przed ograniczoną powłoką, najprawdopodobniej
rbash
lubrsh
.Jeśli
.profile
można edytować,PATH
można go rozwinąć, edytując. Gdy znajdziesz/bin
się na ścieżce, możesz zacząćbash
od środkarsh/rbash
, uzyskując dostęp dochsh
polecenia umożliwiającego zmianę powłok. Wiele poleceń ma znaki ucieczki powłoki, których można użyć do ucieczki z ograniczonej powłoki i odzyskania dostępuchsh
.chsh
naprawdę nie działa z innego powodu. rozwiązanie z możliwości 1 również jest tutaj odpowiedzią.Scenariusz 2 jest jedynym powodem do zmiany domyślnej powłoki (jest zbyt restrykcyjna).
źródło
Nie sądzę, że podana odpowiedź faktycznie tworzy
zsh
domyślną powłokę. Po prostu zmienia powłokę na zsh, gdy tylko użytkownik zaloguje się do swojej domyślnej powłoki . Użytkownik nadal będzie się logować do niego,DEFAULT SHELL
ale dzięki temu powłoka zmieni się nazsh
Aby zmienić domyślną powłokę użyj:
Powinieneś być rootem, aby to zrobić.
W przeciwnym razie powyższe obejście się przyda.
Dodano z komentarza
i może być przywołany przez użytkownika dla niego samego.
źródło
chsh -s /path/to/zsh
jest bardziej standardowy i zwykle (ale nie zawsze) nie wymaga dostępu do roota, w przeciwieństwie do tego,usermod
co zawsze. Więc twoja odpowiedź ma więcej problemów niż to, co w pytaniu już nie działa.