ให้ tmux รอจนกระทั่งฉันใช้ SSH เพื่อทำสคริปต์ Tmuxinator ให้เสร็จ


13

หลังจากเพิ่งค้นพบ tmux และ Tmuxinator ฉันได้พยายามตั้งค่าสภาพแวดล้อมการพัฒนาที่จะใช้

ตามโปรโตคอลเราไม่ได้รับอนุญาตให้เก็บรหัสผ่าน / วลีรหัสผ่านในสคริปต์ ดังนั้นสิ่งที่ฉันกำลังมองหาคือการรอให้ tmux รออุโมงค์ SSH เพื่อตั้งค่า (รหัสผ่านให้ป้อนกดและเข้าสู่ระบบ)

ฉันรู้ว่ามีคำสั่ง "รอคอย" ใน tmux 1.8+ ฉันใช้ 1.9a ผ่าน Cygwin แต่ถึงแม้ว่าฉันจะอ่านเอกสารฉันก็มีเวลายากที่จะเข้าใจมัน

tmux new-session -s development -n editor -d
tmux split-window -v
tmux split-window -v

"Need to send to all panes.
tmux send-keys -t development 'ssh user@example.com' C-m

ดังนั้นนี่คือรุ่นที่ง่ายมากของสิ่งที่ฉันมี

คิด? ฉันรู้ว่าฉันสามารถซิงโครไนซ์ - เซสชันได้ฉันยังคงหาข้อบกพร่องในเรื่องนี้อยู่

แก้ไข : ค้นหาคำสั่งและดึงตัวแปรจากบานหน้าต่างไปยังคำสั่งจากหน้าต่างที่ซิงโครไนซ์ นี่อาจเป็นวิธีที่ "ดีกว่า" ในการดำเนินการต่อไปจนกว่าฉันจะสามารถหาวิธีรับ TMUX เพื่อแจ้งให้ฉันป้อนข้อมูลผู้ใช้

อาจส่งคำขอคุณสมบัติ


2
ทำไมคุณไม่เชื่อมต่อโดยไม่มีรหัสผ่านและใช้กุญแจสาธารณะ / ส่วนตัว?
YoMismo

ฉันถูกบอกว่าฉันไม่สามารถเชื่อมต่อได้ แม้ว่าฉันจะสามารถทำได้ในทางเทคนิคแต่ก็ไม่เป็นที่ยอมรับกับนโยบายที่มีการใช้งาน ฉันไม่มีเสียง / สิทธิอำนาจในการเปลี่ยนแปลง (อย่างรวดเร็ว?) เช่นกัน ดังนั้นในกรณีของฉันในการตรวจสอบถนนที่มีการต่อต้านน้อยที่สุดดูเหมือนว่าจะมีสัญญา
Tango Bravo

1
ฉันคิดว่ากล่องระยะไกลไม่ได้ติดตั้ง tmux? มิฉะนั้นจะเป็นการดีกว่าที่จะ ssh ลงในกล่องรีโมตและจากนั้นเรียกใช้ tmux // นอกจากนี้ผมขอแนะนำให้คุณใช้ประโยชน์จากของคุณ~/.ssh/configไฟล์: ใส่Host foo, User userและHostname example.comสามสายติดต่อกันในไฟล์ config จากนั้นก็จะกลายเป็นเทียบเท่ากับssh foo ssh user@example.com// บางทีบางอย่างเช่นนี้ก็ช่วยได้เช่นกันcommand-prompt -p 'log in as:' -I 'user@example.com' 'split-window -v -d %1; split-window -v -d %1'
เมียน

คำตอบ:


3

บางบันทึกของ wait-for

ดังนั้นการใช้งานพื้นฐานของการรอคอยจึงไม่ซับซ้อนเกินไปถ้าคุณคิดว่ามันเหมือนกับการทำเธรดพร็อพเพอร์ตี้ที่เกิดขึ้นพร้อมกัน

มันไม่ได้เชื่อมต่อกับฟังก์ชั่น tmux อื่น ๆ เพียงแค่ใช้งาน IPC ได้สะดวก

wait-for event_nameก็เหมือนกับการรอให้เหตุการณ์ wait-for -S event_name เป็นวิธีการส่งสัญญาณเหตุการณ์

-Uและ-Lมีตัวเลือกชนิดของฉากและการกระทำเช่นsemaphores

ตอบคำถามของคุณโดยตรง

คุณสามารถแก้ไขเงื่อนไขการแย่งชิงเหล่านี้ได้ด้วยwait-forแต่ถ้าคำสั่งนั้นซิงโครนัส

tmux send-keys 'sync-command ; tmux wait-for -S command-finished' C-m
tmux wait-for command-finished

ปัญหาที่คุณมีที่นี่คือคำสั่ง ssh ไม่ได้ซิงโครนัส: คุณไม่สามารถบอกได้เมื่อมันเสร็จสิ้น

เมื่อดูจากคู่มือเราสามารถค้นหาLocalCommandคำสั่งที่ดูเหมือนว่าจะทำสิ่งที่เราต้องการ: เรียกใช้คำสั่งในเครื่องหลังจากการเชื่อมต่อเสร็จสิ้นเพื่อให้เราสามารถโทรได้

ssh root@iris.tatw.name -o 'PermitLocalCommand yes' -o 'LocalCommand  tmux wait-for -S done'

ดังนั้นโดย "ไม่เชื่อมต่อกับฟังก์ชั่นอื่น ๆ " คุณหมายถึงว่าchannelเป็นเพียงชื่อในเนมสเปซของตัวเองและไม่เกี่ยวข้องกับ "เหตุการณ์" ที่กำหนดไว้ล่วงหน้าของ tmux?
ormaaj

ยังอาจจะมีปัญหาการแข่งขันที่ถ้าwait-for -Sไม่ได้รับประกันการจัดส่งข้อความและเสร็จสิ้นก่อนsync-command wait-for
ormaaj
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.