Bagaimana saya bisa membuat tmux menggunakan shell default saya?


155

Pada pengaturan baru, tmux menggunakan bash sebagai ganti default saya (zsh).

Bagaimana saya bisa memaksanya untuk menggunakan zsh?


12
menemukannya. Dapat mengatur yang berikut ini di tmux config: set -g default-command / bin / zsh set -g default-shell / bin / zsh
re5et

4
FWIW, Anda tidak perlu mengatur perintah-default jika Anda telah mengatur shell-standar.
Nicholas Riley

Jawaban:


200
set-option -g default-shell /bin/zsh

di ~/.tmux.confatau /etc/tmux.conf. Bekerja di Fedora.

Anda mungkin harus memulai ulang tmux dengan killall tmux; tmux


5
Jika ini tidak berhasil, pastikan Anda memulai kembali tmux. Tampak jelas tetapi butuh satu jam yang baik untuk mencari tahu!
Andy Smith

27
BTW: Restart berarti tmux killall tmux; tmux. Butuh waktu cukup lama untuk mencari tahu.
js-coder

5
Konfigurasi dapat dimuat ulang tanpa membunuh server:bind R source-file ~/.tmux.conf \; display-message " Config reloaded..".
ДМИТРИЙ МАЛИКОВ

14
Atau cukup jalankan tmux source-file ~/.tmux.confdari baris perintah.
Petr Pudlák

12
@ js-coder: untuk lebih bersih membunuh server tmux Anda, saya akan merekomendasikan tmux kill-server.
Chuim

41

Pertama pastikan shell default Anda diatur dengan benar ke zsh melalui menjalankan ini di baris perintah Anda:

chsh -s $(`which zsh`) $USER

Menempatkan folloowing di ~ / .tmux.conf Anda adalah opsi yang lebih kuat untuk semua shell.

set-option -g default-shell $SHELL

1
Tidak perlu mengatur shell pengguna ( chsh -s) karena tmux menawarkan opsi yang terpisah dari itu.
Mahmoud Al-Qudsi

Saya pikir lebih kuat menggunakan variabel $ SHELL. Tapi itu menambah langkah dan kebingungan tambahan jadi saya lebih suka jawaban yang diterima.
DebugXYZ

Ini lebih baik daripada jawaban yang diterima. Zsh saya tidak diinstal di / bin / zsh.
HappyFace

20

Letakkan baris ini di bagian bawah ~/.tmux.conf

set-option -g default-command "reattach-to-user-namespace -l zsh"

Setelah Anda menambahkan itu, bunuh dan mulai ulang server tmux Anda dan semua akan berfungsi.


2
Eh, apakah ada indikasi bahwa re5et (OP) ada di Mac, atau apakah program pembungkusnya sudah diinstal?
Chris Johnsen

1
Saya pikir jawaban ini hanya berfungsi untuk Mac OS X
EhevuTov

5
tmux kill-serveradalah perintah untuk mengakhiri semua server tmux
Keith Smiley

1
Meskipun itu bukan jawaban yang diminta OP, saya berakhir di utas ini dan memang saya menggunakan OS X, menggunakan pembungkus ini, dan ini adalah solusi yang saya butuhkan; jadi terima kasih!
Jose Alban

1
bagaimana ini berbeda set-option -g default-shell ? di atas sepertinya tidak bekerja dengan shell Ikan.
Tommy

5

Jika Anda ingin memaksa tmux untuk menggunakan shell yang sama seperti yang ditentukan dalam variabel lingkungan Anda, Anda bisa menggunakan:

# force SHELL ENV variable as shell
set-option -g default-shell ${SHELL}

di ~/.tmux.confatau /etc/tmux.conf.

Untuk mendapatkan perubahan agar benar-benar berlaku, Anda mungkin perlu tmux kill-serverdan kemudian tmuxuntuk me-restart tmux.


1
Ini adalah satu-satunya jawaban yang bekerja untuk saya (perintah tmux kill-server)
undefined


2

Log-out dan log-in kembali memperbaiki masalah saya. Ketika digaungkan $SHELLmasih /bin/bashtapi setelah log-out itu diubah menjadi/usr/bin/zsh


2

tmux tampaknya menggunakan SHELLvariabel lingkungan, jadi yang berikut harus berfungsi:

SHELL=/usr/bin/zsh tmux

atau

env SHELL=/usr/bin/zsh tmux

Tidak yakin mengapa ini tidak dipilih. Tampaknya benar: masalah umum adalah menggunakan shell yang berbeda untuk misalnya iTerm tetapi meninggalkan shell login /bin/bashuntuk memastikan tidak ada kerusakan non-iteraktif. ITerm tidak akan mengatur $SHELLke nama shell baru (tidak yakin mengapa), dan inisialisasi bash akan mengaturnya ke shell login jika tidak disetel pada saat startup. tmux kemudian menggunakan nilai ini jika default-shelltidak disetel secara eksplisit.
Sam Brightman

Ya .. mungkin env SHELL=/usr/bin/zsh tmuxlebih baik? (memperbarui jawabannya).
blueyed

1

Tambahkan ini ke dalam ~/.tmux.conf

set -g default-command /usr/local/bin/fish

1

Jawaban yang diterima tidak berhasil untuk saya.

Saya harus menulis keduanya

set -g default-shell "/bin/bash"

dan

set -g default-commanmd "/bin/bash"

di ~/.tmux.conf- jangan lupa tmux kill-server; tmux, untuk memuat ulang tmux.conf


Saya menggunakan tmux -V2.6 di bawah Ubuntu 18 di emulator gnome-shell.

Saya juga meningkatkan tmux dengan https://github.com/samoshkin/tmux-config . Lihat itu, sangat keren.


0

Bagi saya, saya harus mengganti:

default-command "/usr/local/bin/fish"
default-shell "/usr/local/bin/fish"

dengan

set-option -g default-command "/usr/local/bin/fish"
set-option -g default-shell "/usr/local/bin/fish"

masuk .tmux.conf dan jalankan perintahtmux kill-server; tmux


Ini adalah duplikat dari jawaban superuser.com/a/1370909/174140 .
174140

@ John Saya sudah menggunakan set-option -gbukan set -g. berbagai versi tmux yang paling mungkin
Ali Amin

setadalah alias untuk set-option.
174140
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.