Ändern der Standard-Shell ohne chsh- oder Administratorrechte


8

Ich habe das folgende Snippet in diesem Thread gesehen: Wie man von csh zu bash als Standard-Shell wechselt

sleep 2
if (-x /usr/local/bin/bash) then
  exec /bin/sh -c '. ~/.profile; exec /usr/local/bin/bash'
endif

Mein Verständnis ist, dass wenn Sie dieses Snippet darin platzieren, ~/.logines bashbeim Anmelden aufgerufen wird.

Ich habe eine ähnliche Situation, in der ich ein ähnliches Snippet verwenden möchte, um eine Version aufzurufen zsh, die sich von der Standardversion unterscheidet, mit der ich mich anmelde. Ein Grund, warum ich dieses Problem habe, ist, dass ich mich nicht entscheiden kann meine gewünschte Version von zshin den Optionen erlaubt chsh, und ich habe keine Administratorrechte.

Mit diesem:

  • Wie würde ich das obige Snippet ändern, um dies zu tun, wenn ich zwischen verschiedenen Versionen von zsh wechsle?
  • Warum werden execim obigen Snippet zwei Befehle benötigt? Was machen Sie? Warum wird das obige Snippet verwendet sh und bash (der Benutzer soll sich mit anmelden csh)

Antworten:


6

Wenn Sie zsh anstelle von bash ausführen möchten, ersetzen Sie es einfach /usr/local/bin/bashdurch den Pfad zur zshausführbaren Datei. Beachten Sie, dass dieses Snippet spezifisch für csh ist. Wenn Ihre Login-Shell nicht (t) csh ist, wird dieser Code in ~/.loginnichts für Sie tun.

Warum das Snippet so geschrieben wurde, muss die Person fragen, die es geschrieben hat. [Überprüft, wer das war.] Oh. Wenn Sie dies nur tun, werden exec /usr/local/bin/bashSie keine Login-Shell starten, sodass Ihre .profilenicht ausgeführt wird. Dies könnte jedoch auf einfachere Weise durch Ausführen gelöst werden /usr/local/bin/bash --login.

Wenn Ihre Login-Shell nicht csh ist, möchten Sie ein anderes Snippet exec. In Muscheln im Bourne-Stil, einschließlich zsh:

if [ -x ~/bin/zsh ]; then exec ~/bin/zsh; fi

Machen Sie das, exec ~/bin/zsh -lwenn Sie möchten, dass die neue Instanz von zsh Ihre liest ~/.zprofile. Beachten Sie, dass sich das obige Snippet in Ihrem .profileoder befinden muss, wenn Sie dies tun .bash_profile. Wenn Ihre Login-Shell zsh ist, fügen Sie das Snippet nicht in Ihr ein .zprofile, oder stellen Sie sicher, dass die neue Instanz von zsh das nicht noch execeinmal aufruft .


Danke @ Gilles. Ich habe folgendes auf mein geschrieben .zprofile: if [[ $ZSH_VERSION != 4.3.14 ]]; then exec /n/sw/zsh-4.3.14/bin/zsh --login fiund das scheint zu funktionieren!
Amelio Vazquez-Reina
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.