Bash betiğinin içindeki tmux'da çalıştırma


2

Benim bash betiğim bazı fonksiyonlara sahip ve ben de bash betiği içinde bir işlevi yürütmek için bir tmux bölmesine ihtiyacım var. Örneğin, aşağıdaki kod çalışmaz ve "internal" komutunun bulunamadığı bildirilir.

common() {
internal() {
echo "Function executed"
}   

SESSIONNAME="ses"

tmux new-session -s $SESSIONNAME -n session -d
tmux split-window -t $SESSIONNAME:0 -h

tmux send-keys 'internal' 'C-m'
tmux select-window -t $SESSIONNAME:0
tmux attach -t $SESSIONNAME
}

Peki, tmux'a tmux bölmesinin çağrıldığı betiğindeki işlevi çalıştırmasını nasıl söyleyebilirim?

Yanıtlar:


1

Bildiğim kadarıyla, kabuk işlevlerini tmux örneğine veremezsiniz. En azından tmux man sayfasının 1.9 versiyonunda buna referans yok.

Bunun mümkün olduğunu sanmıyorum çünkü tmux oturumu oluşturduğunuz komut dosyasının içeriği tmux oturumu içindeki bağlamdan tamamen farklı. Böylece bu fonksiyonlar hakkında bilgi sahibi bile olamaz. Ayrıca, tmux kullandığınızdan bile farklı bir kabuk kullanabilir.

Ancak, bazı alternatifler sunmak için yapabilecekleriniz:

  1. Başka bir komut dosyası yaz, internalfonksiyonunu içine koy ve onun yerine onu kullan.
  2. Tüm işlevlerinizi içeren bir kitaplık komut dosyası yazarak, başka bir şey olmadan, uygulama komut dosyalarındaki sourceo kitaplık komut dosyası kullanılabilir, böylece işlevler orada kullanılabilir ve bu uygulama komut dosyalarının yerine kullanılır.

İkinci alternatif ayrıca size daha fazla kod hijyeni ve daha iyi yeniden kullanılabilirlik sağlar.


0

Argüman olarak bir işlevi alan ve 'send-keys' kullanarak tmux oturumuna yükleyen bir bash işlevi yazdım. Açıkçası, alıcı tmux bölmesinin bash veya bu işlev çalışırken uyumlu bir şey çalıştırması gerekir.

_pass_to_tmux() {
    _FUNC_TO_PASS="${1}"
    _IFS_BACKUP="${IFS}"
    IFS=$'\n'
    for i in $(type ${_FUNC_TO_PASS} | tail -n +2); do
        tmux send-keys "${i}" C-m
    done 
    IFS="${_IFS_BACKUP}"
}
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.