2017-12-27 16 views
0

Ich habe vor ein paar Jahren mit UNIX gearbeitet, und ich fange gerade wieder an, mich wieder darauf einzulassen. Ich habe mich gefragt, ob jemand mir mit einer Frage helfen könnte.Wirksame Methoden zum Ändern von Shells in UNIX

Zum Beispiel, wenn ich in bash bin, sage ich chsh --shell /bin/tcsh danach werde ich aufgefordert, mein Passwort einzugeben. Wenn ich versuche, echo $SHELL zu sagen, wird es mir nicht sagen, dass ich Schalen geändert habe. Es sagt mir immer noch, ich bin in der Bash, nicht C-Shell. Also muss ich gehen und neu starten. Sobald ich es zurückmelde, dann es sagt, ich bin in C-Shell.

Gibt es eine effektivere Methode zum Schalenwechsel? Eine, bei der ich mich nicht an- und abmelden muss?

Vielen Dank im Voraus.

+3

Einfach Befehl 'tcsh' und dann' echo $ 0'. Sie können sich nicht auf $ SHELL verlassen, siehe zum Beispiel 'man bash'. –

+1

Sie können sich auf $ SHELL verlassen, aber ihr Zweck ist nicht, Ihnen zu sagen, in welcher Shell Sie sich befinden. Ihr einziger Zweck ist es, anderen Programmen mitzuteilen, welche Shell Sie bevorzugen. Wenn ein Programm eine Shell erzeugen muss, sollte es den Wert der Umgebungsvariablen SHELL prüfen und verwenden, dass –

+1

'$ SHELL' ist der" * vollständige Pfadname der Login-Shell des aktuellen Benutzers * "(aus' man bash') was ist nicht unbedingt die aktuelle Shell. – cdarke

Antwort

0

chsh (1): Ihre Login-Shell

ändern Nachdem Sie Ihre Schale mit chsh ändern, sollte es zu dieser Shell anmelden automatisch jedes Mal, wenn Sie ein Terminal öffnen.

Wenn Sie eine andere Shell vorübergehend verwenden möchten, führen Sie einfach, dass die Schale direkt: „tcsh“, „zsh“, etc ..

Wenn Sie eine bestimmte Schale für ein Skript verwenden shebang verwenden möchten „# ! ".

Beispiel - Die folgenden in der ersten Zeile eines Shell-Skript wird das Skript sicherzustellen, mit sh laufen (und Sie können dies auf Ihrem System zur Verfügung für jede Schale tun):

#!/bin/sh 
0

überprüfen Sie immer Ihre aktuelle Shell mit:

echo $0 

So erhalten Sie den genauen Prozess (Ihre aktuelle Shell) Sie laufen. Wenn Sie $ SHELL ausdrucken, wird Ihnen die Standard-Shell zurückgegeben, die geöffnet wird, wenn Sie sich beim Server anmelden, es sei denn, das ist es, was Sie nicht zuverlässig brauchen.

ubuntu$ echo $SHELL 
/bin/bash 
ubuntu$ echo $0 
-bash 
ubuntu$ sh 
\[\e[31m\]\u\[\e[m\]$ echo $SHELL 
/bin/bash 
\[\e[31m\]\u\[\e[m\]$ echo $0 
sh 
\[\e[31m\]\u\[\e[m\]$ 

Grüße!

+1

Beachten Sie, dass "$ 0" nicht zuverlässig ist. Obwohl ich zustimme, dass dies etwas pathologisch ist, beachte: 'rm -f/bin/csh; ln/bin/bash/bin/csh; csh; echo $ 0' –

+0

@WilliamPursell Ich stimme Ihnen zu, dass in bestimmten Fällen $ 0 nicht zuverlässig wäre, aber für die meisten normalen Fälle ist es. Und ja, Ihr Beispielfall ist pathologisch, und wenn jemand es wirklich beabsichtigt hätte, könnte es das System wirklich auf eine Weise durcheinander bringen, dass Sie nicht wissen, wo/was Sie laufen, aber in einem solchen Fall würde es sicher bedeuten, dass Sie wirklich verloren haben Kontrolle über Ihren Server. Es ist besser, einfach weiterzumachen und es neu zu erstellen. : P –

Verwandte Themen