Nasza firma korzysta z systemu red hat linux i przydziela każdemu konto w / home. Niestety nasz system używa tsch, co nie jest dla mnie korzystne. Co więcej, ponieważ nie mam uprawnień superużytkownika, nie mogę użyć polecenia chsh, aby zmienić się na bash. Co gorsza, ypchsh jest również dla mnie niedostępny. Wreszcie dodałem następujące wiersze do pliku .cshrc:
bash
echo $0
i odpowiednio skonfiguruj .bashrc (kopiowanie z oryginalnego .cshrc i naprawienie niezbędnego błędu składniowego). Teraz widoczna powłoka staje się bash (jak można to zobaczyć po poleceniu „echo $ 0”).
Teraz pojawia się problem:
Kiedy używam vima do edycji pliku cpp (np. Hello_World) i używam „:! G ++ -g Hello_World.cpp -o hw.out” w vimie do skompilowania pliku, żaden wynik nie zostanie wyświetlony, a vim zostanie zakończony z Pokazano „bash” (jak gdy terminal jest otwarty), ale bez zwykłego „wciśnięcia klawisza”, aby wrócić do mojej pracy w vimie. W folderze Hello_World.cpp znajduje się plik .Hello_World.cpp.swp, ale nie hw.out. Gdy vim Hello_World.cpp ponownie, okazuje się, że ten plik CPP został otwarty.
Jeśli jednak g ++ plik cpp w folderze, ale nie używam vim i:!, Wszystko jest w porządku. W rzeczywistości, :! teraz wydaje się być nielegalny dla vima.
Jeśli użyję oryginalnego tcsh, wszystko też będzie OK.
Jak mogę naprawić ten ciekawy błąd?
Z góry dziękuję za życzliwą pomoc.
qing
BTW: Wolę bash niż tcsh przede wszystkim ze względu na wygodę HISTIGNORE i HISTCONTROL, chociaż tcsh ma również ustawienia histdup.
Uważam, że poniższe informacje są trochę pomocne, ale nadal niezadowalające dla mojego problemu.
chsh
do zmiany powłoki logowania.Odpowiedzi:
Umieść to w swoim skrypcie .login:
Pierwszy wiersz ustawia zmienną środowiskową SHELL. Druga linia zastępuje
tcsh
zbash
, ale mówi mu, by działał jako powłokę logowania (takbash
przetwarza.profile
etc). Możesz dodać-i
opcję, aby uczynić go interaktywnym; nie powinno to być konieczne.źródło
set shell=/bin/bash
w VIM. W ten sposób możesz zachować swoją powłokę, ale użyj BASH w VIM i unikaj!
problemów. Widzę jednak, że OP i tak preferuje bash, więc twoje rozwiązanie nie tylko rozwiąże problem VIM, ale da OP preferowaną powłokę.vim
(lubvi
) na cokolwiek zechce , w zasadzie niemożliwe jest ograniczenie dostępu do systemu, jeśli zezwolisz użytkownikowi na dostęp dovi
lubvim
. W przeszłości ludzie próbowali ustawić powłokę na specjalny program, który wykonuje tylko niektóre polecenia. Jeśli jednak jednym z tych poleceń jestvi
lubvim
, mają mimo to dostęp do systemu.Domyślna powłoka dla każdego użytkownika jest przechowywana w pliku / etc / passwd. Użytkownik może zmienić domyślną powłokę na dowolną z powłok wymienionych w / etc / shells, wydając
chsh
polecenie. Więcej informacji można znaleźć na stronach podręcznika chsh (1) i powłok (5).Ta odpowiedź jest „bardziej poprawna” niż podejście polegające na zastąpieniu bieżącej powłoki po zalogowaniu, ponieważ w pierwszej kolejności nie jest konieczne uruchamianie niepożądanej powłoki. Takie podejście jest użyteczne tylko wtedy, gdy administrator zaniedbał plik / etc / shells i zapomniał dodać do niego bash (nigdy).
źródło
Dziękuję za twoją wielką pomoc.
Przed podaniem ostatecznego rozwiązania, które wybiorę, muszę wskazać błąd w moim pierwotnym pytaniu. Mój oryginalny plik .cshrc ma następujące trzy wiersze:
Wcześniej tęskniłem za wpisaniem drugiej linii. Przepraszam.
Teraz wypróbowałem te dwie metody, a wyniki pokazano poniżej.
1) metoda .vimrc
Jeśli napiszę
w ~ / .cshrc
i
w ~ / .vimrc
bez żadnego pliku ~ / .login, a następnie vim i:! g ++ jest OK, ale:! gdb a.out ma jakiś błąd. Ponadto „echo $ 0” daje „bash”, ale „echo $ SHELL” daje „/ bin / tcsh”. Nie znam dokładnie różnicy między 0 $ a SHELL.
2) metoda logowania
Jeśli napiszę
w .login
ale ani nic takiego jak „set shell = ...” w ~ / .vimrc ani „bash ...” w ~ / .cshrc, wszystko jest w porządku. Teraz „echo $ 0” daje „bash”, a „echo $ SHELL” daje „/ bin / bash”.
Bash w drugiej linii można zastąpić „bash -l”. Należy zauważyć, że jeśli zastąpię go słowem „exec bash” lub „exec bash -l”, nie będę mógł zalogować się na swoje konto. (System automatycznie kończy pracę.) Ja też nie wiem dlaczego.
Myślę, że druga metoda jest świetna. Bardzo doceniam twoją pomoc.
źródło