Jak zmienić domyślną powłokę na bash, jeśli nie mam dostępu do chsh ani / etc / passwd?

8

Pracuję na uniwersyteckim zdalnym koncie Linuksa, a domyślna powłoka niestety cshnie kończy tabulacji. Jak mogę zmienić domyślną powłokę mojego konta na bash? chshjest niedostępne.

Mcandre
źródło
1
Z jakiego systemu korzysta uniwersytet do przechowywania kont? ldapmodifymoże zadziałać.
user1686,
Lub, jeśli używają NIS, ypchshpowinno być właściwym poleceniem.
m000
Jeśli chcesz tylko uzupełnienia tabulatorów, możesz dodać je do ~ / .cshrc set fileci set autolist.
Hennes,

Odpowiedzi:

11

Prawdopodobnie powinieneś spróbować zapytać swoich sysadminów, czy mogą zmienić dla ciebie domyślną powłokę. Jeśli nie mogą lub nie chcą (jak w przypadku, gdy byłem na studiach), obejściem, którego użyłem, było dodanie

# Exec bash if using an interactive shell.
if ($?prompt) then
    setenv SHELL /path/to/bash
    exec $SHELL
endif

do .cshrc. (Pamiętaj, aby zastąpić /path/to/bashgo prawdziwą ścieżką, oczywiście. Może to być nawet wersja, bashktóra znajduje się w twoim katalogu domowym, jeśli wersja dostarczona przez system jest zbyt nieaktualna dla twojego gustu.) Dla wydajności, najlepiej zrobić to tak wcześnie, .cshrcjak to możliwe, aby uniknąć dodatkowego .cshrcprzetwarzania, które stanie się dyskusyjne po bashzastąpieniu cshprocesu.

jjlin
źródło
Na moim uniwersytecie to nie zadziałało. Prawdopodobnie będę musiał porozmawiać z sysadminem.
2rs2ts
3

Możesz po prostu się połączyć

ssh -t yourhost bash

aby automatycznie uruchomić powłokę Bash po zalogowaniu.


Z poniższych komentarzy możesz zobaczyć alternatywę

ssh -t yourhost exec bash

execuruchomi nowy proces i wyjdzie ze starego, więc cshproces zakończy się bezpośrednio.

Jeśli dołączymy -lna końcu polecenia jako argument do Basha, będzie on traktowany jako powłoka logowania, ale być może nie jest to konieczne.

Daniel Andersson
źródło
1
ssh -t yourhost exec -a bash -l bashaby całkowicie zastąpić oryginalną powłokę, zamiast działać jako proces w początkowej powłoce.
chepner
@chepner: Interesujące, sam używam prostego ssh -t host bashrozwiązania w podobnej sytuacji, ale twoja droga jest lepsza. W ogóle o tym nie myślałem exec, dzięki! Zaktualizuję post z twoją sugestią.
Daniel Andersson
Trochę mi się podoba, używając argumentów dla bashwbudowanego polecenia exec.
chepner
@chepner: Ach tak, próbowałem go teraz na komputerze z zsh jako domyślnej powłoki i to nie na obu -ai -l. Zmodyfikuję przykład w mojej odpowiedzi.
Daniel Andersson
0

Najlepszym rozwiązaniem, jakie znalazłem, było rozwiązanie wymiany stosów. Oto wymiana stosu linków, a oto rozwiązanie:

utwórz plik .profile w swoim katalogu domowym i wklej poniżej lub dodaj na końcu pliku .profile, jeśli już go masz.

case $- in
  *i*)
    # Interactive session. Try switching to bash.
    if [ -z "$BASH" ]; then # do nothing if running under bash already
      bash=$(command -v bash)
      if [ -x "$bash" ]; then
        export SHELL="$bash"
        exec "$bash"
      fi
    fi
esac
MattC
źródło
0

szukałem dużo, gdy używasz uwierzytelniania LADP przez PAM, myślę, że najlepszym rozwiązaniem jest umieszczenie SHELL = / bin / bash exec / bin / bash w pliku .profile w katalogu domowym użytkownika

użytkownik454581
źródło