Notre entreprise utilise le système Red Hat Linux et alloue à chacun un compte dans / home. Malheureusement, notre système utilise tsch, ce qui n'est pas favorable pour moi. De plus, comme je n'ai pas l'autorisation de super utilisateur, je ne peux pas utiliser la commande chsh pour changer pour bash pour moi. Pire encore, ypchsh est également indisponible pour moi. Donc, enfin, j'ajoute les lignes suivantes dans le .cshrc:
bash
echo $0
et configurez le .bashrc de manière appropriée (copie à partir du .cshrc d'origine et correction de l'erreur de syntaxe nécessaire). Maintenant, le shell apparent devient bash (comme le montre la commande "echo $ 0").
Maintenant, le problème se pose:
Lorsque j'utilise vim pour éditer un fichier cpp (par exemple, Hello_World) et que j'utilise ":! G ++ -g Hello_World.cpp -o hw.out" dans vim pour compiler le fichier, aucun résultat ne sera affiché et vim est quitté avec "bash" affiché (comme quand un terminal est ouvert), mais sans l'habituel "appuyez sur une touche" pour revenir à mon travail dans vim. Dans le dossier Hello_World.cpp, il y a un fichier .Hello_World.cpp.swp, mais pas hw.out. Lorsque vim Hello_World.cpp recommence, il s'avère que ce fichier cpp a été ouvert.
Cependant, si je g ++ le fichier cpp dans le dossier mais n'utilise pas vim et:!, Tout va bien. En réalité, :! semble désormais illégal pour vim.
Si j'utilise le tcsh d'origine, tout est également OK.
Comment pourrais-je corriger cette curieuse erreur?
Merci pour votre aimable aide à l'avance.
qing
BTW: Je préfère bash à tcsh principalement en raison de la commodité de HISTIGNORE et HISTCONTROL, bien que tcsh ait également un paramètre histdup.
J'ai trouvé ce qui suit un peu utile mais toujours pas satisfaisant pour mon problème.
chsh
pour changer votre shell de connexion.Réponses:
Mettez ceci dans votre script .login:
La première ligne définit la variable d'environnement SHELL. La deuxième ligne remplace le
tcsh
withbash
, mais lui dit de s'exécuter comme un shell de connexion (ainsibash
traitera votre.profile
etc). Vous pouvez ajouter une-i
option pour la rendre interactive; cela ne devrait pas être nécessaire.la source
set shell=/bin/bash
intérieur de VIM. De cette façon, vous pouvez conserver votre shell, mais utilisez BASH dans VIM et évitez les!
problèmes. Cependant, je vois que OP préfère de toute façon bash, donc votre solution résoudra non seulement le problème VIM, mais donnera à OP son shell préféré.vim
(ouvi
) comme bon lui semble, il est fondamentalement impossible de restreindre l'accès à un système si vous autorisez l'utilisateur à accéder àvi
ouvim
. Dans le passé, les gens ont essayé de définir le shell sur un programme spécial qui n'exécute que certaines commandes. Cependant, si l'une de ces commandes estvi
ouvim
, elles ont quand même accès au système.Le shell par défaut pour tout utilisateur est stocké dans le fichier / etc / passwd. L'utilisateur peut changer son shell par défaut en n'importe lequel des shells répertoriés dans / etc / shells en exécutant la
chsh
commande. Consultez les pages de manuel de chsh (1) et shells (5) pour plus d'informations.Cette réponse est "plus correcte" que l'approche consistant à remplacer le shell actuel après la connexion, car il n'est pas nécessaire de démarrer le shell indésirable en premier lieu. Cette approche n'est utile que lorsque l'administrateur a négligé le fichier / etc / shells et oublié d'y ajouter bash (jamais).
la source
Merci pour toute votre grande aide.
Avant de donner la solution finale que je choisis, je dois signaler une erreur dans ma question initiale. Mon .cshrc d'origine a les trois lignes suivantes:
J'ai manqué de taper la deuxième ligne avant. Désolé.
Maintenant, j'ai essayé ces deux méthodes, et les résultats sont présentés ci-dessous.
1) Méthode .vimrc
Si j'écris
dans ~ / .cshrc
et
dans ~ / .vimrc
sans aucun fichier ~ / .login, alors vim et:! g ++ est OK, mais:! gdb a.out a une erreur. De plus, "echo $ 0" donne "bash" mais "echo $ SHELL" donne "/ bin / tcsh". Je ne connais pas exactement la différence entre 0 $ et $ SHELL.
2) Méthode .login
Si j'écris
dans .login
mais ni quelque chose comme "set shell = ..." dans ~ / .vimrc ni "bash ..." dans ~ / .cshrc, tout va bien. Maintenant, "echo $ 0" donne "bash" et "echo $ SHELL" donne "/ bin / bash".
Le bash en deuxième ligne peut être remplacé par "bash -l". Il convient de noter que si je le remplace par "exec bash" ou "exec bash -l", je ne pourrai pas me connecter à mon compte. (Le système se ferme automatiquement rapidement.) Je ne sais pas non plus pourquoi.
Je pense que la deuxième méthode est excellente. J'apprécie beaucoup votre aide.
la source