ใช่: มีวิธีบอกโปรแกรม x ที่ทำงานอยู่ให้เปิดไฟล์จาก bash!
ดังนั้น จากคำแนะนำจากฝ่ายสนับสนุนทางเทคนิคของ StataCorp กลับกลายเป็นว่า xdotool
(ซึ่งสามารถติดตั้งกับ sudo apt ติดตั้ง xdotool
ถ้ายังไม่ได้อยู่ในระบบของคุณ) เสนอวิธีแก้ไขปัญหาในคำถามของฉัน จากเว็บไซต์โครงการ:
xdotool
ให้คุณจำลองกิจกรรมการป้อนข้อมูลด้วยแป้นพิมพ์และเมาส์ ย้ายและปรับขนาดหน้าต่าง ฯลฯทำสิ่งนี้โดยใช้ส่วนขยาย XTEST ของ X11 และฟังก์ชัน Xlib อื่นๆ
â ï¸ หมายเหตุ: หากคุณใช้ Wayland โปรดทราบว่าซอฟต์แวร์นี้จะทำงานไม่ถูกต้อง â ï¸
กับ xdotool
คุณสามารถค้นหาหน้าต่างและย้าย ปรับขนาด ซ่อน และแก้ไขคุณสมบัติของหน้าต่าง เช่น ชื่อเรื่อง หากตัวจัดการหน้าต่างของคุณรองรับ คุณสามารถใช้ xdotool
เพื่อสลับเดสก์ท็อป ย้ายหน้าต่างระหว่างเดสก์ท็อป และเปลี่ยนจำนวนเดสก์ท็อป
เพื่อแก้ปัญหาของฉันด้วย xdotool
ฉันต้องการสร้างไฟล์ xdotool
สคริปต์ที่ฉันกำลังเรียก statadoc.xdo
:
#!/usr/bin/xdotool
ค้นหา -- ชื่อ "Stata/MP"
พิมพ์ --หน้าต่าง %1 '$1' '$2'
คีย์ --window %1 ย้อนกลับ
ความคิดเห็นเล็กน้อยเกี่ยวกับสคริปต์สั้นนี้:
- เส้นทางอาจเป็นอย่างอื่นที่ไม่ใช่
/usr/bin/xdotool
ดังนั้นโปรดยืนยันด้วย ซึ่ง xdotool
หรือคล้ายกัน.
- บรรทัดที่สองจะตรงกับชื่อบางส่วน
"สเตตัส/MP 17.0"
ด้วยสตริงที่ให้ไว้ด้านบน สิ่งนี้มีประโยชน์ ตัวอย่างเช่น การอัปเกรดเวอร์ชันเป็น 17.1 หรือ 18.x จะไม่ทำให้สคริปต์เสียหาย เดอะ ค้นหา
คำสั่งระบุหน้าต่างแอปพลิเคชัน X ที่ฉันต้องการเชื่อมต่อด้วย
xdotool
สคริปต์ยอมรับข้อโต้แย้งต่อไปนี้ ทุบตี
-ชอบ $1
, $2
ฯลฯ อนุสัญญา.
- เดอะ
พิมพ์
คำสั่งพิมพ์ข้อความที่ให้มาอย่างแท้จริง ในกรณีของฉัน เนื้อหาของทั้งสองที่ให้มา $1
และ $2
อาร์กิวเมนต์สตริงในหน้าต่างที่ 1 (และในกรณีของฉันเท่านั้น) ที่ระบุโดย ค้นหา
คำสั่งในบรรทัดที่ 2
- เดอะ
กุญแจ
คำสั่งส่ง <ENTER>
(หรือ <RETURN>
ถ้าคุณต้องการ) ไปยังหน้าต่าง Stata เดียวกัน
ทีนี้มาดูที่สคริปต์เปิดใช้ที่แก้ไขซึ่งเรียกใช้ statadoc.xdo
ในบรรทัดที่สามถึงบรรทัดสุดท้าย (ฉันได้เพิ่มส่วนข้างหน้าเพื่อให้ทราบว่าอาร์กิวเมนต์ที่ระบุระบุว่าไฟล์ Stata ประเภทใดประเภทหนึ่งหรือไม่ จำเป็นต้องใช้คำสั่งการใช้ที่แตกต่างกันเพื่อจัดการแต่ละไฟล์อย่างสง่างามหรือไม่ ตัวอย่างของฉันยังไม่สมบูรณ์ แต่ไฟล์เหล่านี้เป็นประเภทไฟล์ ฉันใช้ในงานส่วนใหญ่ของฉัน):
# ตรวจสอบว่าไม่มีข้อโต้แย้ง ถ้าไม่ ไม่ทำอะไรเลย
ถ้า [ -z "$1" ]
แล้ว
หยุดพัก
# มิฉะนั้น ให้ตั้งคำนำหน้าเป็นค่าเริ่มต้น แล้วตรวจสอบ
# ไม่ว่าชื่อไฟล์จะลงท้ายด้วย .hlp, .sthlp, .ado, .do หรือ .gph
อื่น
คำนำหน้า = "ใช้"
ถ้า [ ${1##*.} = "hlp" ] || [ ${1##*.} = "sthlp" ] || [ ${1##*.} = "ado" ] || [ ${1##*.} = "ทำ" ]
แล้ว
# หากชื่อไฟล์ลงท้ายด้วยหนึ่งในสี่คำนำหน้าเหล่านั้น
# เปลี่ยนคำนำหน้าเป็น "doedit" เพื่อให้ Stata เปิดเอกสารด้วย
# ตัวแก้ไข do-file
คำนำหน้า = "doedit "
ไฟ
# หากชื่อไฟล์ลงท้ายด้วย .gph ให้เปลี่ยนคำนำหน้าเป็น "doedit"
# Stata เปิดเอกสารด้วยโปรแกรมดูกราฟ/โปรแกรมแก้ไข
ถ้า [ ${1##*.} = "gph" ]
แล้ว
คำนำหน้า = "การใช้กราฟ"
ไฟ
หยุดพัก
ไฟ
# ตรวจสอบว่า xstata-mp v17 กำลังทำงานอยู่หรือไม่
exit_code_pidof_xstata_mp=$(pidof /usr/local/stata17/xstata-mp)
# หาก xstata-mp v17 ไม่ทำงาน ให้เปิดใช้งานด้วยอาร์กิวเมนต์ $1
ถ้า [ -z "$exit_code_pidof_xstata_mp" ]
แล้ว
/usr/local/stata17/xstata-mp -q $1; ออก >/dev/null
# แต่ถ้า xstata-mp v17 IS ทำงาน ให้นำมาไว้ข้างหน้าแทน
อื่น
# อันดับแรก เรียก statadoc.xdo โดยมีคำนำหน้าเป็นอาร์กิวเมนต์แรก
# และเส้นทางไฟล์ที่ให้มาเป็นอาร์กิวเมนต์ที่สอง
/usr/share/stata17/bin/statadoc.xdo "$prefix" " $1"
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep /usr/local/stata17/xstata-mp)" | tail -1 | awk '{ พิมพ์ $1 }')"; ออก > /dev/null
ไฟ
หมายเหตุ: นี่เป็นวิธีแก้ปัญหาสำหรับ Gnome ที่ทำงานบน Xorg