Unser Unternehmen verwendet das Red Hat Linux-System und weist jedem ein Konto in / home zu. Leider verwendet unser System tsch, was für mich nicht günstig ist. Da ich nicht über die Superuser-Berechtigung verfüge, kann ich den Befehl chsh nicht verwenden, um für mich selbst zu bash zu wechseln. Schlimmer noch, ypchsh ist auch für mich nicht verfügbar. Also füge ich endlich die folgenden Zeilen in die .cshrc ein:
bash
echo $0
und konfigurieren Sie die .bashrc entsprechend (Kopieren von der ursprünglichen .cshrc und Beheben des erforderlichen Syntaxfehlers). Jetzt wird die scheinbare Shell zu Bash (wie aus dem Befehl "echo $ 0" hervorgeht).
Jetzt taucht das Problem auf:
Wenn ich eine cpp-Datei mit vim bearbeite (z. B. Hello_World) und in vim ":! G ++ -g Hello_World.cpp -o hw.out" verwende, um die Datei zu kompilieren, wird kein Ergebnis angezeigt und vim wird mit beendet "bash" wird angezeigt (wie wenn ein Terminal geöffnet ist), aber ohne das übliche "Drücken einer Taste", um zu meiner Arbeit in vim zurückzukehren. Im Ordner Hello_World.cpp befindet sich eine .Hello_World.cpp.swp-Datei, jedoch nicht hw.out. Wenn vim Hello_World.cpp erneut angezeigt wird, stellt sich heraus, dass diese CPP-Datei geöffnet wurde.
Wenn ich jedoch die cpp-Datei im Ordner g ++, aber nicht vim und:! Verwende, ist alles in Ordnung. Eigentlich, :! jetzt scheint für vim illegal zu sein.
Wenn ich das Original tcsh verwende, ist auch alles in Ordnung.
Wie könnte ich diesen merkwürdigen Fehler beheben?
Vielen Dank für Ihre freundliche Hilfe im Voraus.
Qing
Übrigens: Ich bevorzuge bash gegenüber tcsh, hauptsächlich wegen der Bequemlichkeit von HISTIGNORE und HISTCONTROL, obwohl tcsh auch eine Histdup-Einstellung hat.
Ich fand das Folgende ein wenig hilfreich, aber für mein Problem immer noch nicht zufriedenstellend.
chsh
Sie diese Option, um Ihre Login-Shell zu ändern.Antworten:
Fügen Sie dies in Ihr .login-Skript ein:
In der ersten Zeile wird die Umgebungsvariable SHELL festgelegt. Die zweite Zeile ersetzt die
tcsh
mitbash
, weist sie jedoch an, als Anmeldeshell ausgeführt zu werden (sobash
wird Ihre.profile
usw. verarbeitet). Sie können eine-i
Option hinzufügen , um sie interaktiv zu gestalten. es sollte nicht notwendig sein.quelle
set shell=/bin/bash
in VIM einfügen. Auf diese Weise können Sie Ihre Shell behalten, aber BASH in VIM verwenden und die!
Probleme vermeiden . Ich sehe jedoch, dass OP ohnehin Bash bevorzugt, sodass Ihre Lösung nicht nur das VIM-Problem löst, sondern OP auch die bevorzugte Shell gibt.vim
(odervi
) beliebig einstellen kann , ist es grundsätzlich unmöglich, den Zugriff auf ein System einzuschränken, wenn Sie dem Benutzer Zugriff aufvi
oder gewährenvim
. In der Vergangenheit haben Leute versucht, die Shell auf ein spezielles Programm einzustellen, das nur bestimmte Befehle ausführt. Wenn jedoch einer dieser Befehlevi
oder istvim
, haben sie trotzdem Zugriff auf das System.Die Standard-Shell für jeden Benutzer wird in der Datei / etc / passwd gespeichert. Der Benutzer kann seine Standard-Shell durch Ausgabe des
chsh
Befehls in eine der in / etc / shells aufgelisteten Shells ändern . Weitere Informationen finden Sie in den Handbuchseiten von chsh (1) und shells (5).Diese Antwort ist "korrekter" als der Ansatz, die aktuelle Shell nach dem Anmelden zu ersetzen, da es nicht erforderlich ist, die unerwünschte Shell zuerst zu starten. Dieser Ansatz ist nur dann nützlich, wenn der Administrator die Datei / etc / shells vernachlässigt und vergessen hat, Bash hinzuzufügen (niemals).
quelle
Vielen Dank für all Ihre großartige Hilfe.
Bevor ich die endgültige Lösung gebe, die ich wähle, muss ich auf einen Fehler in meiner ursprünglichen Frage hinweisen. Meine ursprüngliche .cshrc hat die folgenden drei Zeilen:
Ich habe vorher die zweite Zeile verpasst. Es tut uns leid.
Jetzt habe ich diese beiden Methoden ausprobiert und die Ergebnisse sind unten gezeigt.
1) .vimrc-Methode
Wenn ich schreibe
in ~ / .cshrc
und
in ~ / .vimrc
Ohne ~ / .login-Datei ist vim und :! g ++ in Ordnung, aber :! gdb a.out hat einen Fehler. Außerdem gibt "echo $ 0" "bash", "echo $ SHELL" jedoch "/ bin / tcsh". Ich kenne den Unterschied zwischen $ 0 und $ SHELL nicht genau.
2) Anmeldemethode
Wenn ich schreibe
in .login
aber weder etwas wie "set shell = ..." in ~ / .vimrc noch "bash ..." in ~ / .cshrc, alles ist in Ordnung. Jetzt gibt "echo $ 0" "bash" und "echo $ SHELL" "/ bin / bash".
Der Bash in der zweiten Zeile kann durch "bash -l" ersetzt werden. Es sollte beachtet werden, dass ich mich nicht in meinem Konto anmelden kann, wenn ich es durch "exec bash" oder "exec bash -l" ersetze. (Das System wird automatisch schnell beendet.) Ich weiß auch nicht warum.
Ich finde die zweite Methode großartig. Ich schätze Ihre Hilfe sehr.
quelle