Nuestra empresa utiliza el sistema Red Hat Linux y asigna a todos una cuenta en / home. Desafortunadamente, nuestro sistema está usando tsch, lo que no es favorable para mí. Además, como no tengo el permiso de superusuario, no puedo usar el comando chsh para cambiar a bash por mí mismo. Peor aún, ypchsh tampoco está disponible para mí. Entonces, por fin, agrego las siguientes líneas en el .cshrc:
bash
echo $0
y configure el .bashrc adecuadamente (copiando del .cshrc original y reparando el error de sintaxis necesario). Ahora el shell aparente se convierte en bash (como se puede mostrar desde el comando "echo $ 0").
Ahora surge el problema:
Cuando uso vim para editar un archivo cpp (por ejemplo, Hello_World), y uso ":! G ++ -g Hello_World.cpp -o hw.out" en vim para compilar el archivo, no se mostrará ningún resultado, y vim se cierra con se muestra "bash" (como cuando un terminal está abierto), pero sin el habitual "presionar una tecla" para volver a mi trabajo en vim. En la carpeta Hello_World.cpp, hay un archivo .Hello_World.cpp.swp, pero no hw.out. Cuando vim Hello_World.cpp nuevamente, resulta que este archivo cpp ha sido abierto.
Sin embargo, si g ++ el archivo cpp en la carpeta pero no uso vim y:!, Todo está bien. De hecho, :! ahora parece ser ilegal para vim.
Si uso el tcsh original, todo también está bien.
¿Cómo podría solucionar este curioso error?
Gracias de antemano por su amable ayuda.
qing
Por cierto: prefiero bash a tcsh principalmente debido a su conveniencia de HISTIGNORE e HISTCONTROL, aunque tcsh también tiene configuración histdup.
Encontré lo siguiente un poco útil pero aún no satisfactorio para mi problema.
chsh
para cambiar su shell de inicio de sesión.Respuestas:
Pon esto en tu script .login:
La primera línea establece la variable de entorno SHELL. La segunda línea reemplaza a
tcsh
conbash
, pero le dice que se ejecute como un shell de inicio de sesión (porbash
lo que procesará su.profile
etc.). Puede agregar una-i
opción para hacerlo interactivo; No debería ser necesario.fuente
set shell=/bin/bash
dentro de VIM. De esa manera, puede mantener su shell, pero use BASH en VIM y evite los!
problemas. Sin embargo, veo que OP prefiere bash de todos modos, por lo que su solución no solo resolverá el problema de VIM, sino que le dará a OP su shell preferido.vim
(ovi
) a lo que quiera, es básicamente imposible restringir el acceso a un sistema si permite que el usuario accedavi
aovim
. En el pasado, las personas han intentado configurar el shell en un programa especial que solo ejecuta ciertos comandos. Sin embargo, si uno de esos comandos esvi
ovim
, tienen acceso al sistema de todos modos.El shell predeterminado para cualquier usuario se almacena en el archivo / etc / passwd. El usuario puede cambiar su shell predeterminado a cualquiera de los shells listados en / etc / shells emitiendo el
chsh
comando. Consulte las páginas del manual de chsh (1) y shells (5) para obtener más información.Esta respuesta es "más correcta" que el enfoque de reemplazar el shell actual después de iniciar sesión porque, en primer lugar, no es necesario iniciar el shell no deseado. Ese enfoque es útil solo cuando el administrador ha descuidado el archivo / etc / shells y se le olvida agregar bash (nunca).
fuente
Gracias por toda su gran ayuda.
Antes de dar la solución final que elijo, debo señalar un error en mi pregunta original. Mi .cshrc original tiene las siguientes tres líneas:
Eché de menos escribir la segunda línea antes. Lo siento.
Ahora, probé estos dos métodos, y los resultados se muestran a continuación.
1) método .vimrc
Si yo escribo
en ~ / .cshrc
y
en ~ / .vimrc
sin ningún archivo ~ / .login, vim y:! g ++ está bien, pero:! gdb a.out tiene algún error. Además, "echo $ 0" da "bash" pero "echo $ SHELL" da "/ bin / tcsh". No sé exactamente la diferencia entre $ 0 y $ SHELL.
2) método de inicio de sesión
Si yo escribo
en .login
pero ni nada como "set shell = ..." en ~ / .vimrc ni "bash ..." en ~ / .cshrc, todo está bien. Ahora, "echo $ 0" da "bash" y "echo $ SHELL" da "/ bin / bash".
El bash en la segunda línea se puede reemplazar por "bash -l". Cabe señalar que si lo reemplazo por "exec bash" o "exec bash -l", no podré iniciar sesión en mi cuenta. (El sistema se cierra automáticamente rápidamente). Tampoco sé por qué.
Creo que el segundo método es genial. Agradezco mucho tu ayuda.
fuente