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
TERM
mungkin diatur ke beberapa nilai lain oleh file pengguna .tmux.conf
. Lebih baik untuk memeriksa apakah TMUX
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:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
Referensi
command
untuk memeriksa keberadaan perintah - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand
daripada which
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_PANEScommand
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 gunakan exec 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 menggunakan tmux attach
jika 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 exit
bagian:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
Perhatikan juga Anda tidak harus membungkus tmux attach
dengan exec
, karena hal ini akan menyebabkan koneksi akan ditutup jika tidak ada sesi tmux untuk melampirkan.
Ada perintah chsh
yang mengubah shell login. Konsultasikan man chsh
.
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
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 tmux
sebagai shell default saya ( chsh -s $(which tmux)
) dan tampaknya memecah eksekusi perintah langsung melalui SSH, misalnya ssh $some_server echo foo
tidak akan menghasilkan output apa pun.
Tidak ada respons di atas yang berfungsi untuk saya - exec tmux
mencegah saya menutup tmux tanpa keluar dari shell (apakah dibuka dengan Ctrl
+ 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 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 mysession
mungkin 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 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 mengatur default-shell
ke shell aktual di ~/.tmux.conf
file Anda (lihat manual tmux untuk info lebih lanjut tentang ini).
Anda bisa (dan seperti yang sekarang mungkin harus) menggunakan chsh
perintah 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 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.
chsh
fungsinya! Kecuali bahwa cara Anda membutuhkan root dan rawan kesalahan. Menjalankan tmux
dari .bash_login
adalah lebih mungkin untuk istirahat remote login.
[[ $- != *i* ]] && return
untuk tidak menjadi loop tak terbatas (dari halaman yang sama)