Saya ingin bash shell default saya untuk langsung masuk ke tmux daripada saya selalu harus mengetik tmux setiap kali.
Saya ingin bash shell default saya untuk langsung masuk ke tmux daripada saya selalu harus mengetik tmux setiap kali.
Jawaban:
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
TERMmungkin diatur ke beberapa nilai lain oleh file pengguna .tmux.conf. Lebih baik untuk memeriksa apakah TMUXvariabel 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:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
Referensi
commanduntuk memeriksa keberadaan perintah - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommanddaripada whichmemeriksa keberadaan perintah - https://unix.stackexchange.com/a/85250$PS1untuk memeriksa shell interaktif - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERMVariabel keadaan lingkungan yang diharapkan "untuk semua program yang berjalan di dalam tmux" - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANEScommandsebelumnya tetapi tidak menyadari itu ada.
execpernyataan tidak membiarkan Anda keluar tmux tanpa berhenti seluruh terminal! : |
execmenggantikan 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 tmuxdengan rasa pilihan Andatmux attach
exec tmuxsaya gunakan exec tmux new-session -A -s mainjadi 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 menggunakan tmux attachjika tidak ada sesi yang tersedia (ditemukan di sini: unix.stackexchange.com/a/176885/256942 )
Menambahkan garis seperti
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
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 exitbagian:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
Perhatikan juga Anda tidak harus membungkus tmux attachdengan exec, karena hal ini akan menyebabkan koneksi akan ditutup jika tidak ada sesi tmux untuk melampirkan.
Ada perintah chshyang mengubah shell login. Konsultasikan man chsh.
tmuxbukan shell, ini adalah terminal multiplexer seperti layar GNU. Menariknya, ia mendukung -copsi 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-shellpengaturan dalam konfigurasi tmux untuk menunjuk ke shell yang sebenarnya.
Saya berhasil menggunakan
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
di saya .zshrc. Jika Anda menggunakan bash, letakkan di bash Anda .bashrc.
Saya juga baru saja mencoba menetapkan tmuxsebagai shell default saya ( chsh -s $(which tmux)) dan tampaknya memecah eksekusi perintah langsung melalui SSH, misalnya ssh $some_server echo footidak akan menghasilkan output apa pun.
Tidak ada respons di atas yang berfungsi untuk saya - exec tmuxmencegah saya menutup tmux tanpa keluar dari shell (apakah dibuka dengan Ctrl+ Tatau 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+ Bmelakukan semacam bash -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.
if command -v tmux>/dev/null; then
if [ ! -z "$PS1" ]; then # unless shell not loaded interactively, run tmux
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && tmux
fi
fi
Anda bisa membungkus semua itu menjadi satu baris tetapi untuk keterbacaan saya pikir itu baik-baik saja.
[[ ! $TERM =~ screen ]] && [ -z $TMUX ] && exec tmux &
Menambahkan ke jawaban @Louis Maddox, saya akan menjalankan bagian tmux dengan;
(exec tmux attach || exec tmux new-session)
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 mysessionmungkin akan bekerja juga.
Ini di ~/.profile(saya menggunakan ksh93) saya:
if [[ -z "$TMUX" ]]; then
if tmux has-session 2>/dev/null; then
exec tmux attach
else
exec tmux
fi
fi
Jika TMUXvariabel lingkungan tidak disetel / kosong, maka kita belum berada di sesi tmux, jadi ...
Jika tmux has-sessionkembali dengan status keluar nol (benar), ada sesi yang tersedia untuk dilampirkan. Pasang itu.
Jika tidak, buat sesi baru.
Dimungkinkan juga untuk digunakan tmuxsebagai shell login Anda. Namun, jika Anda melakukan ini, pastikan untuk mengatur default-shellke shell aktual di ~/.tmux.conffile Anda (lihat manual tmux untuk info lebih lanjut tentang ini).
Anda bisa (dan seperti yang sekarang mungkin harus) menggunakan chshperintah untuk mengatur tmux sebagai shell default, kemudian tambahkan yang berikut ke .tmux.conf:
set-option -g default-shell /path/to/your/favourite/shell
Ingatlah untuk memodifikasi jalur di akhir baris.
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.
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux a -t default || exec tmux new -s default && exit;
fi
Berdasarkan jawaban ini:
Tambahkan ini ke dalam ~/.tmux.conf
set -g default-command /usr/local/bin/fish
Sebagai Mikel sudah menyatakan dalam komentarnya untuk memiliki tmux sebagai shell login Anda dapat memiliki efek samping. Tetapi Anda dapat membuat tmuxshell default Anda, secara harfiah. Shell default pengguna didefinisikan di / etc / passwd. Jadi Anda bisa menjadi root dan mengedit / etc / passwd, mis. sudo vi /etc/passwdCari 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.
chshfungsinya! Kecuali bahwa cara Anda membutuhkan root dan rawan kesalahan. Menjalankan tmuxdari .bash_loginadalah lebih mungkin untuk istirahat remote login.
[[ $- != *i* ]] && returnuntuk tidak menjadi loop tak terbatas (dari halaman yang sama)