Mengapa 'tmux' membuat windows baru sebagai shell login secara default?


26

Saat Anda memulai sesi baru di tmuxatau membuat jendela baru di dalam sesi berlari, perilaku default-nya adalah menjalankan shell (mis .:) bashsebagai shell login.

Saya mengerti bahwa shell login dimaksudkan untuk menjalankan rutin konfigurasi dan prosedur yang menarik hanya ketika Anda masuk ke sistem . Tetapi dalam sebagian besar kasus (dengan pengecualian yang dapat Anda gunakan tmux sebagai shell login) itu bukan maksud sebenarnya dari pengguna untuk melakukan ini ketika dia hanya ingin membuka jendela baru.

Jadi apa alasan untuk menjadikan ini perilaku default tmux?


Satu-satunya dokumentasi mengatakan tentang masalah ini:

default-command  shell-command
        Set the command used for new windows (if not specified when the
        window is created) to shell-command, which may be any sh(1)
        command.  The default is an empty string, which instructs tmux
        to create a login shell using the value of the default-shell
        option.

Jawaban:


24

Shell non-login interaktif biasanya tidak pernah hidup lebih lama dari shell login level teratas Anda, oleh karena itu mereka dapat mengharapkan fasilitas yang dimulai olehnya tersedia kapan saja, tetapi ini tidak terjadi dengan tmux:

  • Anda login ke shell Anda -> skrip login Anda dijalankan
  • Anda menjalankan tmux, melakukan sesuatu, lepaskan
  • keluar dari shell tingkat atas Anda -> skrip logout Anda dijalankan
  • Sesi tmux masih berjalan tetapi semua fasilitas yang dimulai oleh shell login Anda tidak tersedia saat ini
  • Anda login lagi dan pasang kembali dari shell login lain
  • fasilitas apa pun yang dimulai oleh shell login baru mungkin tidak dapat dilihat oleh tmux karena masih berjalan dengan lingkungan lama (walaupun ada perintah untuk memperbarui lingkungan)

Beberapa orang mungkin berpikir memiliki tmux memulai shell login tidak diperlukan karena dalam kebanyakan setup tidak ada skrip logout, dan skrip login hanya mengatur beberapa variabel lingkungan.

Lebih jauh lagi jika Anda menambahkan string ke variabel lingkungan Anda di skrip login Anda (seperti ini: PATH = $ PATH: / some / other / path) dan mereka dijalankan lebih dari satu kali dalam hierarki proses yang sama dengan yang Anda hasilkan dengan duplikat, dan ini adalah paling menyebalkan.

Tapi saya masih berpikir bahwa default itu masuk akal.

Lihat juga ini: http://openbsd-archive.7691.n7.nabble.com/tmux-and-login-shells-td170948.html


2
Terima kasih atas jawabannya dan tautannya! Saya pikir saya bisa hidup dengan exec shpada akhirnya ... (Saya tidak memikirkan itu.)
leogama

3
Apakah Anda memiliki contoh konkret hal-hal yang dapat pecah jika tmux tidak menelurkan shell login? Saya sedang berpikir untuk menjadikannya default, tetapi saya tidak ingin mengalami masalah yang sulit didiagnosis.
Carl Patenaude Poulin
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.