Nossa empresa usa o sistema linux da red hat e aloca para todos uma conta em / home. Infelizmente, nosso sistema está usando o tsch, o que não é favorável para mim. Além disso, como não tenho a permissão de superusuário, não posso usar o comando chsh para mudar para o bash por mim mesmo. Pior ainda, o ypchsh também não está disponível para mim. Então, finalmente, adiciono as seguintes linhas no .cshrc:
bash
echo $0
e configure o .bashrc adequadamente (copiando do .cshrc original e corrigindo o erro de sintaxe necessário). Agora, o aparente shell se torna bash (como pode ser mostrado no comando "echo $ 0").
Agora, o problema surge:
Quando uso o vim para editar um arquivo cpp (por exemplo, Hello_World) e uso ":! G ++ -g Hello_World.cpp -o hw.out" no vim para compilar o arquivo, nenhum resultado será mostrado e o vim é encerrado com "bash" mostrado (como quando um terminal está aberto), mas sem o habitual "pressione uma tecla" para voltar ao meu trabalho no vim. Na pasta Hello_World.cpp, há um arquivo .Hello_World.cpp.swp, mas não hw.out. Quando o vim Hello_World.cpp novamente, verifica-se que esse arquivo cpp foi aberto.
No entanto, se eu g ++ o arquivo cpp na pasta, mas não usando o vim e:!, Tudo está bem. De fato, :! agora parece ser ilegal para o vim.
Se eu usar o tcsh original, tudo ficará bem.
Como posso corrigir esse erro curioso?
Agradecemos sua ajuda antecipada.
qing
BTW: Eu prefiro o bash ao tcsh principalmente devido à sua conveniência de HISTIGNORE e HISTCONTROL, embora o tcsh também tenha a configuração histdup.
Achei o seguinte um pouco útil, mas ainda não satisfatório para o meu problema.
chsh
para alterar seu shell de login.Respostas:
Coloque isso no seu script .login:
A primeira linha define a variável de ambiente SHELL. A segunda linha substitui o
tcsh
porbash
, mas diz para ele ser executado como um shell de login (bash
o processo será processado.profile
etc.). Você pode adicionar uma-i
opção para torná-lo interativo; não deve ser necessário.fonte
set shell=/bin/bash
dentro do VIM. Dessa forma, você pode manter seu shell, mas use o BASH no VIM e evite os!
problemas. No entanto, vejo que o OP prefere o bash de qualquer maneira, portanto, sua solução não apenas resolverá o problema do VIM, mas fornecerá ao OP seu shell preferido.vim
(ouvi
) como quiser, é basicamente impossível restringir o acesso a um sistema se você permitir que o usuário acessevi
ouvim
. Antigamente, as pessoas tentavam definir o shell para um programa especial que apenas executava certos comandos. No entanto, se um desses comandos forvi
orvim
, eles terão acesso ao sistema de qualquer maneira.O shell padrão para qualquer usuário é armazenado no arquivo / etc / passwd. O usuário pode alterar seu shell padrão para qualquer um dos shells listados em / etc / shells, emitindo o
chsh
comando Consulte as páginas de manual do chsh (1) e shells (5) para obter mais informações.Esta resposta é "mais correta" do que a abordagem de substituir o shell atual após o login, porque é desnecessário iniciar o shell indesejado em primeiro lugar. Essa abordagem é útil apenas quando o administrador negligenciou o arquivo / etc / shells e esqueceu de adicionar o bash a ele (nunca).
fonte
Obrigado por toda a sua grande ajuda.
Antes de dar a solução final que escolhi, devo apontar um erro na minha pergunta original. Meu arquivo .cshrc original possui as três linhas a seguir:
Eu senti falta de digitar a segunda linha antes. Desculpa.
Agora, tentei esses dois métodos e os resultados são mostrados abaixo.
1) método .vimrc
Se eu escrever
em ~ / .cshrc
e
em ~ / .vimrc
sem qualquer arquivo ~ / .login, o vim e:! g ++ está OK, mas:! gdb a.out tem algum erro. Além disso, "echo $ 0" fornece "bash", mas "echo $ SHELL" fornece "/ bin / tcsh". Não sei exatamente a diferença entre $ 0 e $ SHELL.
2) método .login
Se eu escrever
em .login
mas nem algo como "set shell = ..." em ~ / .vimrc nem "bash ..." em ~ / .cshrc, está tudo bem. Agora, "echo $ 0" fornece "bash" e "echo $ SHELL" fornece "/ bin / bash".
O bash na segunda linha pode ser substituído por "bash -l". Deve-se observar que, se eu o substituir por "exec bash" ou "exec bash -l", não poderei efetuar login na minha conta. (O sistema fecha automaticamente rapidamente.) Também não sei o porquê.
Eu acho que o segundo método é ótimo. Eu aprecio muito a sua ajuda.
fonte