Perusahaan kami menggunakan sistem linux red hat dan mengalokasikan setiap orang akun di / rumah. Sayangnya, sistem kami menggunakan tsch, yang tidak menguntungkan bagi saya. Selain itu, karena saya tidak memiliki izin pengguna super, saya tidak dapat menggunakan perintah chsh untuk mengubah ke bash untuk saya sendiri. Lebih buruk lagi, ypchsh juga tidak tersedia untuk saya. Jadi, akhirnya, saya tambahkan baris berikut ke dalam .cshrc:
bash
echo $0
dan konfigurasikan .bashrc dengan tepat (menyalin dari .cshrc asli dan memperbaiki kesalahan sintaks yang diperlukan). Sekarang shell tampak menjadi bash (seperti yang dapat ditunjukkan dari perintah "echo $ 0").
Sekarang masalahnya muncul:
Ketika saya menggunakan vim untuk mengedit file cpp (misalnya, Hello_World), dan menggunakan ":! G ++ -g Hello_World.cpp -o hw.out" dalam vim untuk mengkompilasi file, tidak ada hasil yang akan ditampilkan, dan vim keluar dengan "bash" ditampilkan (seperti ketika terminal terbuka), tetapi tanpa biasanya "tekan tombol" untuk kembali ke pekerjaan saya di vim. Di folder Hello_World.cpp, ada file .Hello_World.cpp.swp, tetapi tidak hw.out. Ketika vim Hello_World.cpp lagi, ternyata file cpp ini telah dibuka.
Namun, jika saya g ++ file cpp di folder tetapi tidak menggunakan vim dan:!, Semuanya OK. Faktanya, :! sekarang tampaknya ilegal untuk vim.
Jika saya menggunakan tcsh asli, semuanya juga OK.
Bagaimana saya bisa memperbaiki kesalahan yang aneh ini?
Terima kasih atas bantuannya sebelumnya.
qing
BTW: Saya lebih suka bash ke tcsh terutama karena kenyamanannya dari HISTIGNORE dan HISTCONTROL, meskipun tcsh juga memiliki pengaturan histdup.
Saya menemukan berikut ini sedikit membantu tetapi masih belum memuaskan untuk masalah saya.
chsh
untuk mengubah shell login Anda.Jawaban:
Masukkan ini ke dalam skrip .login Anda:
Baris pertama mengatur variabel lingkungan SHELL. Baris kedua menggantikan
tcsh
denganbash
, tetapi mengatakannya untuk berjalan sebagai shell login (jadibash
akan memproses Anda.profile
dll). Anda dapat menambahkan-i
opsi untuk menjadikannya interaktif; seharusnya tidak perlu.sumber
set shell=/bin/bash
VIM. Dengan begitu, Anda dapat menyimpan shell Anda, tetapi gunakan BASH di VIM dan hindari!
masalah. Namun, saya melihat bahwa OP lebih memilih bash, jadi solusi Anda tidak hanya akan menyelesaikan masalah VIM, tetapi juga memberikan OP shell pilihan mereka.vim
(atauvi
) apa pun yang mereka suka, pada dasarnya tidak mungkin membatasi akses ke sistem jika Anda mengizinkan pengguna mengaksesvi
atauvim
. Di masa lalu, orang telah mencoba mengatur shell ke program khusus yang hanya menjalankan perintah tertentu. Namun, jika salah satu dari perintah itu adalahvi
atauvim
, maka mereka tetap memiliki akses ke sistem.Shell default untuk setiap pengguna disimpan di file / etc / passwd. Pengguna dapat mengubah shell default mereka ke salah satu shell yang terdaftar di / etc / shells dengan mengeluarkan
chsh
perintah. Lihat halaman manual chsh (1) dan shells (5) untuk informasi lebih lanjut.Jawaban ini "lebih benar" daripada pendekatan penggantian shell saat ini setelah masuk karena tidak perlu memulai shell yang tidak diinginkan di tempat pertama. Pendekatan itu hanya berguna ketika administrator telah mengabaikan file / etc / shells dan lupa menambahkan bash padanya (tidak pernah).
sumber
Terima kasih atas semua bantuan Anda.
Sebelum memberikan solusi akhir yang saya pilih, saya harus menunjukkan kesalahan dalam pertanyaan awal saya. .Cshrc asli saya memiliki tiga baris berikut:
Saya melewatkan mengetik baris kedua sebelumnya. Maaf.
Sekarang, saya mencoba dua metode ini, dan hasilnya ditunjukkan di bawah ini.
1) .vimrc
Jika saya menulis
di ~ / .cshrc
dan
di ~ / .vimrc
tanpa file ~ / .login, lalu vim dan:! g ++ OK, tetapi:! gdb a.out memiliki beberapa kesalahan. Selanjutnya, "echo $ 0" memberikan "bash" tetapi "echo $ SHELL" memberikan "/ bin / tcsh". Saya tidak tahu persis perbedaan antara $ 0 dan $ SHELL.
2). Metode login
Jika saya menulis
di .login
tetapi tidak ada yang seperti "set shell = ..." di ~ / .vimrc atau "bash ..." di ~ / .cshrc, semuanya baik-baik saja. Sekarang, "echo $ 0" memberikan "bash" dan "echo $ SHELL" memberikan "/ bin / bash".
Bash di baris kedua dapat diganti dengan "bash-l". Perlu dicatat bahwa jika saya menggantinya dengan "exec bash" atau "exec bash-l", maka saya tidak akan dapat masuk ke akun saya. (Sistem secara otomatis berhenti dengan cepat.) Saya juga tidak tahu mengapa.
Saya pikir metode kedua hebat. Saya sangat menghargai bantuan Anda.
sumber