Çalışan bir tmux oturumunda bir tmux bölmesine bir komut çalıştırın veya gönderin


60

Adlandırılmış bir tmux oturumuna eklenecek bir kabuk betiği yazmak, o oturumda bir pencere (veya bölme) seçmek ve seçilen pencerede (veya bölmede) bir komut çalıştırmak istiyorum.

Bunu bir bash betiğinden nasıl yaparım?

biliyorum

tmux new-window -n:mywindow 'exec something'

yeni oluşturulmuş bir pencereye komut göndermeme izin veriyor, ancak buna benzer bir şeye ihtiyacım var

tmux select-window -t:0 'my command'

Kullanabileceğimi sanıyorum send-keysama görünen bir komut ya da çalışan komutların bir listesi olmalı gibi görünüyor.

Yanıtlar:


82

Her tmux bölmesi, tek bir pty (pseudo tty) için bir arayüzdür. Bölünmeyen pencerelerin tek bir bölmesi vardır; bölünmüş pencereler birden fazla bölmeye sahiptir.

tmux , ilk komutu ile başlatıldığında bir bölmeye fazladan işlem eklemek için bir yol sağlamaz. Bu terminal için iş kontrolü 1 sağlamak, bu ilk komutun işlemine (genellikle bir kabuk) bağlıdır .

O anda panelde neyin çalıştığını gizlemek istiyorsanız respawn-pane -kmevcut komutu öldürmek ve onu yenisiyle değiştirmek için kullanabilirsiniz (örn respawn-pane -t sessionname:0.4 -k 'some -new command'.).

Ancak, şu anda bölmede neyin çalıştığını korumak istiyorsanız, o zaman sadece "yazarak" kullanmanın daha iyi bir seçeneği olmayabilir send-keys.

Bunun gibi bir komut dosyası olabilir (sonuncuyu iliştirin, aksi takdirde komut dosyası devam etmeden önce ayrılmanızı bekler):

session=whatever
window=${session}:0
pane=${window}.4
tmux send-keys -t "$pane" C-z 'some -new command' Enter
tmux select-pane -t "$pane"
tmux select-window -t "$window"
tmux attach-session -t "$session"

Üzerine, unutmayın send-keyskomutu, aslında harfleri yazmalısınız E n t e ranlatmak için, tmuxpencereye bir satır anahtarı göndermek için. (Doğal olarak, her komut Enteranahtarla biter .)


1 İş kontrolü, tty'yi kontrol terminali olarak kullanan tek bir oturumun birden fazla işlem grubu arasındaki tahkimdir. Yani, Ctrl+ Zanahtar askıya ve jobs, fgve bgkabuk komutları.


2
Bunun için teşekkürler! #{session_name}:#{window_index}.#{pane_index}Durum satırımı koydum , böylece hangi bölmeye komut gönderileceğini hızlıca görebilirim.
ücretli bir inek,

11

Sen kullanabilirsiniz C-myerine Enter. Aynı şey. Ayrıca, veya tmuxtuşlarını kullanarak sağ / sol bölmeye göndermeyi kolaylaştırır . Ve başka bir pencerede bir bölmeyi ele almak istiyorsanız, sadece pencere numarası ve periyodu gibi önekleyin .-t right-t left-t 0.right

Artık tuş dizisini argüman olarak almak ve kolayca hedef panele göndermek için basit bir Bash işlevi yazabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.