Geçerli oturum içinden yeni bir tmux oturumunda kod nasıl çalıştırılır?


13

Ubuntu 16.04 kullanıyorum ve aşağıdaki tmuxçözüme ihtiyacım var, çünkü sleepözel durumumda olduğu gibi memnun kaldım atve bir hatayla karşılaştım nohup(birleştirirken nohup-sleep). Şimdi, tmuxkendi takılma mekanizmasına sahip olduğu ve manuel kullanımda iyi çalıştığı için en iyi alternatif gibi görünüyor (Bu soruyu sadece manuel olarak yapabileceğim işlemi otomatikleştirme konusunda soruyorum).

Neye ihtiyacım var:

Hepsi bir operasyonda aşağıdaki 3 eylem yapmak için bir yol gerekir:

  1. Yeni bir tmuxoturum ekleme .
  2. Söz konusu oturuma hazır bir komut seti enjekte etmek gibi (sleep 30m ; rm -rf dir_name ; exit). Özellikle çok satırlı bir seti tercih ederim, uzun bir sıra değil.
  3. Yukarıdaki komutun yürütülmesi, yeni tmuxoturumda stdin olarak yazılmasının bittiği anı ayarladı .

Başka bir deyişle, tmuxbu nedenle özel olarak oluşturulmuş başka bir oturumda ayarlanmış bir kod yürütmek , ancak hepsini tek bir işlemde yapmak istiyorum.


Notlar:

  • Orijinal çalışma oturumumdan (çoğu zaman çalıştığım) hepsini yapmayı hedefliyorum. Genel olarak, yeni oluşturulan oturumu ziyaret etmek gibi bir niyetim yok, sadece otomatik olarak çalıştırılan kodu ile oluşturmak istiyorum ve hepsi bu.

  • Mümkünse, bir yorumlu çözümü tercih ederim. En verimli olduğunu düşünüyorum.

Yanıtlar:


18

Yürütmek istediğiniz kodu örneğin koyarsanız, istediğinizi yapmak /opt/my_script.shçok kolaydır:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

Bu, komut dosyanızı yürüten "myTempSession" adlı yeni bir ayrılmış oturum başlatır. Daha sonra yürüterek, bu ne yaptığını kontrol etmek buna ekleyebilirsiniz tmux attach-session -t myTempSession.

Yani bence en basit ve zarif bir çözümdür. Ben tdin ile stdin ("heredocs" okumak) komutları yürütmek için kolay bir yol farkında değilim. Etrafta hack yaparak bunu bile yapabilirsin, ama yine de bir hack olurdu (ve benziyor gibi).

Örneğin, burada ben istediğiniz davranışı taklit (= bir yorumlu metin yeni tmux oturumda kod çalıştırmak için. Geçici dosya oluşturulur olarak hiçbir yazma, sunucunun sabit diskinde meydana yukarıda önerilen komutu kullanan bir beygir /dev/shmolduğunu, a tmpfs) ile ilişkili olan kısmını dışarı aktarmak suretiyle yedek oluşturmanız gerekir:

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF

1
Sevgili Mario. Cevaplarınızı okumak her zaman bir zevktir. Doğru anladığımdan emin değilim, lütfen yanlış olduğumu söyle: 1.Bunu yapmanın iki yolu var, biri önce (kodu içeren) geçici bir komut dosyası oluşturma ve oluşturma ile yürütme ve ikincisi bir heredoc yol. 2.İkinci yol işe yarıyorsa (her yankı satırı heredoc'un her kod satırını içerdiğinde) neden Bash geçerli bir kodsa bunu bir hack olarak görelim? Belki bir yorumlu metin satırları yankılanır ve yorumlu metinlerde düzenli olarak yürütülmezse
JohnDoea

2
@Benia Sadece bazı Unix sistemlerinde çalıştığı için bir saldırı /dev/shm. Ayrıca, komut dosyasını sıradan bir dosyaya yazmaktan ve bununla başlamaktan daha karmaşık, okunması, anlaşılması ve bakımı zordur tmux.
Kusalananda

1
@Kusalananda'nın açıkladığı gibi, kod yürütme için heredoclar genel olarak kötü bir uygulamadır. Çirkin ve sürdürülemez olsa da, işe yarıyor, ancak aksi takdirde çok basit şeyler yapmanın dolambaçlı yolunu bulmaya zorluyor ... sadece cevaptaki birinci ve ikinci kod bloklarını karşılaştırın: nasıl çalıştığını söyleyebilir misiniz? Bunu yapman ne kadar sürer? Bu var daha tmux (i bile dikkate almayacağım çirkin böylece bile-daha-hacky yollarını kaydet) Stdin'den komutları yürütme yol yok şekilde dış komut dosyaları, bir kesmek sadece (cevabı 1.yolu Sorunuzun) .
Mario Vitale

1
Maalesef, ilk örnekte bir hata oluştu (argümanlar kullanırsanız "new-session" komutu ima edilmez). Şimdi düzeltildi.
Mario Vitale

1
Şimdi yürüttüğümde tmux new-session -d -s "myTempSession" /opt/my_script.sh, kodu yapıştırmak için geçici bir dosya açmıyor ... İhtiyacım olan komut, doğrudan geçerli oturumdan veya en azından yeni oturuma geçmek ve daha sonra doğrudan geri dönmek için bir şey açmak geçerli oturum. BTW Sana teşekkür etmek için yapabileceğim en az şey olduğu ve tüm yardımlarınız için lütuf vermeyi planlıyorum ve 11 saat içinde lütuf verebilirim.
JohnDoea

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.