ฉันรู้ว่าฉันสามารถเรียกใช้tmux -V
เพื่อค้นหาเวอร์ชันtmux
ที่อยู่ในของฉันPATH
แต่ฉันจะรับเวอร์ชันtmux
ที่กำลังทำงานอยู่ได้อย่างไร
ฉันรู้ว่าฉันสามารถเรียกใช้tmux -V
เพื่อค้นหาเวอร์ชันtmux
ที่อยู่ในของฉันPATH
แต่ฉันจะรับเวอร์ชันtmux
ที่กำลังทำงานอยู่ได้อย่างไร
คำตอบ:
วิธีที่ชัดเจนที่สุด แต่ไม่ถูกต้อง 100% คือการรันคำสั่งนี้ในคอนโซล
$ tmux -V
และรับเอาต์พุตเช่นนี้tmux 2.9a
ด้วยเวอร์ชันของ tmux INSTALLED ไม่ได้ทำงานอยู่ในขณะนี้ ในกรณี 99% ก็เพียงพอแล้ว แต่อาจมีความแตกต่างเล็กน้อย
คำสั่งtmux -V
จะส่งคืนเวอร์ชันของ tmux ที่ติดตั้งที่ / usr / bin / tmux หรือไดเร็กทอรีอื่น ๆ ภายในตัวแปร PATH ของคุณ หากคุณใช้ tmux อยู่แล้วอาจเป็นไปได้ว่า tmux สามารถเริ่มต้นจากไบนารีของเวอร์ชันอื่นและจากที่อื่นได้ (เช่นสามารถเริ่ม tmux ได้จาก/home/user/bin/tmux
) ในกรณีนี้คุณต้องโทร
$ ps -e | grep tmux
เพื่อดู PID ของกระบวนการ tmux ทั้งหมดที่กำลังทำงานอยู่ มันจะออกมาแบบนี้
[vodolaz095@ivory ~]$ ps -e | grep tmux
19699 pts/0 00:00:00 tmux: client
19701 ? 00:00:00 tmux: server
ที่นี่หมายเลข 19701 แสดงรหัสกระบวนการ (PID) ของเซิร์ฟเวอร์ tmux ที่กำลังทำงานอยู่
หลังจากได้รับ PID ของเซิร์ฟเวอร์ tmux แล้วคุณสามารถรันคำสั่งได้
$ lsof -p 19701
เพื่อรับข้อมูลเกี่ยวกับกระบวนการเซิร์ฟเวอร์ tmux ที่กำลังทำงานอยู่ในปัจจุบัน (ในกรณีของฉันคือ 19701) ซึ่งจะแสดงผลลัพธ์เช่นนี้ (รูปที่ 1)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
tmux:\x20 19701 vodolaz095 cwd DIR 8,33 4096 22544385 /home/vodolaz095
tmux:\x20 19701 vodolaz095 rtd DIR 8,1 4096 2 /
tmux:\x20 19701 vodolaz095 txt REG 8,1 677760 3675332 /usr/bin/tmux
tmux:\x20 19701 vodolaz095 mem REG 8,1 6406312 131327 /var/lib/sss/mc/group
อย่างที่คุณเห็น tmux ที่กำลังทำงานอยู่ถูกเรียกใช้งานจากไบนารีที่วางใน / usr / bin / tmux
หรือจะเรียกหนึ่งซับก็ได้
lsof -p `pgrep 'tmux: server'`
เพื่อให้ได้ผลลัพธ์เช่นเดียวกับรูปที่ 1
หลังจากที่คุณได้รับพา ธ ไปยัง tmux ไบนารีรันในปัจจุบัน (ในกรณีของฉันคือ/usr/bin/tmux
) คุณสามารถรันไบนารีนี้ด้วยแฟล็ก -V เพื่อรับเวอร์ชัน
/usr/bin/tmux -V
หรือหาก tmux ถูกติดตั้งโดยผู้ใช้ที่ จำกัด เข้า/home/user/bin/tmux
,
/home/user/bin/tmux -V
และด้วยเหตุนี้คุณจะได้รับเวอร์ชันของ tmux ที่กำลังทำงานอยู่ไม่ใช่เวอร์ชันที่ติดตั้ง
tmux
ได้รับการอัปเกรดตั้งแต่กระบวนการที่กำหนดเริ่มต้นขึ้น
ps: option requires an argument -- u
tmux -V
ทดสอบบน Ubuntu และ OSX
which tmux
เพื่อค้นหาเส้นทาง
ตามที่ระบุไว้ในความคิดเห็นtmux -V
ส่งคืนเวอร์ชัน:
$ tmux -V
# tmux 1.8
ทดสอบบน Centos 7 และ OSX 10.11.5
หากต้องการค้นหาเวอร์ชันจริงของ tmux ที่กำลังทำงานอยู่คุณต้องค้นหา PID ของ tmux:
pgrep tmux
ด้วยข้อมูลนี้คุณสามารถตรวจสอบเวอร์ชันได้โดยเรียกใช้:
lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"
หากไม่มี (ลบ) ถัดจากไฟล์ tmux ในรายการคุณสามารถเรียกใช้ไฟล์นั้นด้วยไฟล์-V
.
หากผลลัพธ์เป็นไฟล์ที่ "(ลบ)" แสดงว่าคุณกำลังใช้งานเวอร์ชันเก่าที่ถอนการติดตั้ง หากคุณใช้ linux คุณสามารถค้นหาว่ามันคืออะไร:
/proc/$tmuxPID/exe -V`
ถ้าคุณอยู่ใน OS X Cellar/tmux/<version number>/bin/tmux
คุณจะติดอยู่กับข้อมูลสิ่งที่อยู่ในเส้นทางที่จะชื่อไฟล์อาจจะเป็นสิ่งที่ชอบ
คุณสามารถรวมหลายขั้นตอนเหล่านี้ไว้ในซับเดียวต่อไปนี้:
for tmuxPID in $(pgrep tmux); do lsof -p $tmuxPID | grep REG | grep -i -e deleted -e "tmux$"; done
หรือถ้าคุณใช้ Linux สิ่งนี้จะใช้ได้เสมอ:
for tmuxPID in $(pgrep tmux); do /proc/$tmuxPID/exe -V; done
ในการรับเวอร์ชันของเซิร์ฟเวอร์ tmux คุณสามารถใช้ display-message
./tmux2.3 display-message -p "#{version}"
จะแสดงเวอร์ชันของเซิร์ฟเวอร์ (2.7 ในกรณีของฉัน)
-p จะกำหนดเอาต์พุตของ stdout เพื่อให้คุณสามารถเขียนสคริปต์ได้และ {version} สามารถเป็นอะไรก็ได้จากส่วน FORMATS ใน man page
ต่อไปนี้จะให้คุณสามารถเรียกใช้งานเซิร์ฟเวอร์ tmux ของคุณได้
realpath /proc/$(tmux display-message -p "#{pid}")/exe
/proc
สับเป็น Linux เท่านั้น (และอาจ Solaris ฯลฯ แต่ไม่ได้โดยทั่วไปแบบพกพา)
tmux -V