Saya ingin bash shell default saya untuk langsung masuk ke tmux daripada saya selalu harus mengetik tmux setiap kali.
79
Ini sepertinya berhasil ...
https://wiki.archlinux.org/index.php/Tmux#Start_tmux_on_every_shell_login
Cukup tambahkan baris kode bash berikut ke .bashrc Anda sebelum alias Anda; kode untuk shell lain sangat mirip:
[[ $TERM != "screen" ]] && exec tmux
[[ $- != *i* ]] && return
untuk tidak menjadi loop tak terbatas (dari halaman yang sama)TERM
mungkin diatur ke beberapa nilai lain oleh file pengguna.tmux.conf
. Lebih baik untuk memeriksa apakahTMUX
variabel diatur atau tidak.Jawaban @ StarNamer umumnya akurat, meskipun saya biasanya menyertakan tes berikut untuk memastikan bahwa (1) tmux ada pada sistem, (2) kami berada di shell interaktif, dan (3) tmux tidak mencoba berjalan di dalam diri:
Referensi
command
untuk memeriksa keberadaan perintah - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
daripadawhich
memeriksa keberadaan perintah - https://unix.stackexchange.com/a/85250$PS1
untuk memeriksa shell interaktif - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM
Variabel keadaan lingkungan yang diharapkan "untuk semua program yang berjalan di dalam tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESsumber
command
sebelumnya tetapi tidak menyadari itu ada.exec
pernyataan tidak membiarkan Anda keluar tmux tanpa berhenti seluruh terminal! : |exec
menggantikan proses saat ini dengan yang baru - dalam hal ini, ia menggantikan shell bash login dengan tmux, jadi ketika tmux keluar maka tidak ada terminal lain untuk kembali ke :)exec tmux
dengan rasa pilihan Andatmux attach
exec tmux
saya gunakanexec tmux new-session -A -s main
jadi saya akan selalu memiliki sesi yang disebut main dan lampirkan (bukannya membuat yang baru setiap kali saya terhubung ke mesin jarak jauh saya) tetapi itu tidak akan crash seperti menggunakantmux attach
jika tidak ada sesi yang tersedia (ditemukan di sini: unix.stackexchange.com/a/176885/256942 )Menambahkan garis seperti
di file bashrc Anda mungkin akan melakukan pekerjaan itu. Perhatikan baris ini akan keluar ssh dan mengakhiri koneksi setelah Anda melepaskan atau keluar dari tmux. Saya suka konfigurasi ini karena menghemat stroke kunci untuk mengakhiri koneksi. Tetapi jika Anda tidak menyukai ini (yang saya pikir sangat tidak mungkin) dan lebih suka tetap berada di shell login setelah penghentian, cukup hapus
exit
bagian:Perhatikan juga Anda tidak harus membungkus
tmux attach
denganexec
, karena hal ini akan menyebabkan koneksi akan ditutup jika tidak ada sesi tmux untuk melampirkan.sumber
Ada perintah
chsh
yang mengubah shell login. Konsultasikanman chsh
.sumber
tmux
bukan shell, ini adalah terminal multiplexer seperti layar GNU. Menariknya, ia mendukung-c
opsi sesuai dengan halaman manual , jadi itu dapat berfungsi seperti sebuah shell cukup untuk menggunakannya sebagai shell login Anda, tetapi saya menduga itu tidak akan berfungsi dengan baik dalam semua situasi, misalnya login grafis melalui gdm / kdm .ssh $some_server echo foo
)./etc/shells
, jadi itu adalah shell login yang valid.default-shell
pengaturan dalam konfigurasi tmux untuk menunjuk ke shell yang sebenarnya.Saya berhasil menggunakan
di saya
.zshrc
. Jika Anda menggunakan bash, letakkan di bash Anda.bashrc
.Saya juga baru saja mencoba menetapkan
tmux
sebagai shell default saya (chsh -s $(which tmux)
) dan tampaknya memecah eksekusi perintah langsung melalui SSH, misalnyassh $some_server echo foo
tidak akan menghasilkan output apa pun.sumber
Pergi ke preferensi terminal.
Dan kemudian klik ke "command" bar.
Periksa "Jalankan perintah khusus, bukan penjualan saya" dan tulis perintah apa pun yang ingin Anda jalankan pada permulaan terminal Anda.
sumber
Tidak ada respons di atas yang berfungsi untuk saya -
exec tmux
mencegah saya menutup tmux tanpa keluar dari shell (apakah dibuka denganCtrl
+T
atau dari menu aplikasi).Saya menggunakan Linux Mint, yang memungkinkan Anda memetakan hotkeys tertentu ke perintah, dan (tidak-halal seperti mungkin untuk beberapa ..) Saya punya shell bash dengan perintah yang dimulai di sana, misalnya
Win
+Alt
+B
melakukan semacambash -exec(vim)
pernyataan berbelit-belit untuk edit .bashrc saya, jadi ini berfungsi seperti shell biasa.tmux dimuat daripada vim dalam situasi itu setelah menempatkan di atas di bagian atas saya
.bashrc
. Saya telah menggunakan tmux executing line di if if statement lainnya, memeriksa apakah tmux berjalan dalam mode interaktif.Anda bisa membungkus semua itu menjadi satu baris tetapi untuk keterbacaan saya pikir itu baik-baik saja.
sumber
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Menambahkan ke jawaban @Louis Maddox, saya akan menjalankan bagian tmux dengan;
sumber
exec sh -c 'tmux a || tmux'
, yang (setelah melihat jawaban Anda) mungkin akan membuat hal-hal buruk terjadi jika tmux tidak dapat memulai karena alasan apa pun ..... terima kasih, saya akan menggunakan milik Anda mulai sekarang :)tmux new -A -s mysession
mungkin akan bekerja juga.Ini di
~/.profile
(saya menggunakanksh93
) saya:Jika
TMUX
variabel lingkungan tidak disetel / kosong, maka kita belum berada di sesi tmux, jadi ...Jika
tmux has-session
kembali dengan status keluar nol (benar), ada sesi yang tersedia untuk dilampirkan. Pasang itu.Jika tidak, buat sesi baru.
Dimungkinkan juga untuk digunakan
tmux
sebagai shell login Anda. Namun, jika Anda melakukan ini, pastikan untuk mengaturdefault-shell
ke shell aktual di~/.tmux.conf
file Anda (lihat manual tmux untuk info lebih lanjut tentang ini).sumber
Anda bisa (dan seperti yang sekarang mungkin harus) menggunakan
chsh
perintah untuk mengatur tmux sebagai shell default, kemudian tambahkan yang berikut ke.tmux.conf
:Ingatlah untuk memodifikasi jalur di akhir baris.
sumber
Saya menggabungkan pemeriksaan ekstensif, dengan pemeriksaan sesi bersyarat, dan menempatkan putaran saya sendiri di atasnya, untuk membuat sesi default yang terhubung atau dibuat. Kecuali Anda berada di dalam sesi tmux lain, atau kondisi perlindungan lainnya terpenuhi.
Berdasarkan jawaban ini:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
sumber
Tambahkan ini ke dalam
~/.tmux.conf
sumber
Sebagai Mikel sudah menyatakan dalam komentarnya untuk memiliki tmux sebagai shell login Anda dapat memiliki efek samping. Tetapi Anda dapat membuat
tmux
shell default Anda, secara harfiah. Shell default pengguna didefinisikan di / etc / passwd. Jadi Anda bisa menjadi root dan mengedit / etc / passwd, mis.sudo vi /etc/passwd
Cari baris yang dimulai dengan nama pengguna Anda. Mungkin diakhiri dengan:/bin/bash
. Ubah / bin / bash ke / usr / bin / tmux dan sekarang tmux adalah shell login default Anda.Namun, tidak ada jaminan bahwa ini tidak akan menyebabkan masalah!
Yang mungkin bekerja lebih baik adalah TIDAK melakukan apa pun yang membutuhkan hak akses root. Saya akan mencoba membuat file di directoy rumah saya bernama .bash_login dan mulai tmux dari dalam file itu: `echo" tmux "> ~ / .bash_login.
Ini seharusnya bekerja, tetapi Anda harus mencoba dan menemukan sendiri, b / c dokumentasi bash tidak terlalu tepat tentang file apa yang dibaca dan dieksekusi ketika.
sumber
chsh
fungsinya! Kecuali bahwa cara Anda membutuhkan root dan rawan kesalahan. Menjalankantmux
dari.bash_login
adalah lebih mungkin untuk istirahat remote login.