CÓ: Có một cách để yêu cầu chương trình x đang chạy mở tệp từ bash!
Vì vậy, theo lời khuyên từ những người hỗ trợ kỹ thuật của StataCorp, hóa ra là xdotool
(có thể được cài đặt với sudo apt cài đặt xdotool
, nếu nó chưa có trên hệ thống của bạn) đưa ra giải pháp cho chính xác loại sự cố trong câu hỏi của tôi. Từ trang web của dự án:
xdotool
cho phép bạn mô phỏng hoạt động của bàn phím và chuột, di chuyển và thay đổi kích thước cửa sổ, v.v.Nó thực hiện điều này bằng cách sử dụng tiện ích mở rộng XTEST của X11â và các chức năng Xlib khác.
â ï¸ Lưu ý: Nếu bạn đang sử dụng Wayland, vui lòng lưu ý rằng phần mềm này sẽ không hoạt động chính xác. â ï¸
Với xdotool
, bạn có thể tìm kiếm các cửa sổ và di chuyển, thay đổi kích thước, ẩn và sửa đổi các thuộc tính của cửa sổ như tiêu đề. Nếu trình quản lý cửa sổ của bạn hỗ trợ nó, bạn có thể sử dụng xdotool
để chuyển đổi màn hình nền, di chuyển cửa sổ giữa các màn hình nền và thay đổi số lượng màn hình nền.
Để giải quyết vấn đề của tôi với xdotool
, tôi cần tạo một xdotool
kịch bản mà tôi đang gọi statdoc.xdo
:
#!/usr/bin/xdotool
tìm kiếm --name "Stata/MP"
gõ --window %1 '$1' '$2'
phím --window %1 Trả lại
Một vài nhận xét về kịch bản ngắn này:
- Đường dẫn có thể là một cái gì đó khác hơn là
/usr/bin/xdotool
, vì vậy hãy chắc chắn để xác nhận rằng với xdotool nào
hoặc tương tự.
- Dòng thứ hai sẽ khớp một phần với tên
"Thống kê/MP 17.0"
với chuỗi được cung cấp ở trên. Điều này rất hữu ích, chẳng hạn như nâng cấp phiên bản lên 17.1 hoặc 18.x sẽ không làm hỏng tập lệnh. Các Tìm kiếm
lệnh xác định cửa sổ ứng dụng X mà tôi muốn giao tiếp.
xdotool
tập lệnh chấp nhận đối số, sau đánh đập
-Thích $1
, $2
, v.v. quy ước.
- Các
loại
lệnh gõ văn bản được cung cấp theo nghĩa đen—trong trường hợp của tôi, nội dung của hai văn bản được cung cấp $1
và $2
đối số chuỗi trong cửa sổ đầu tiên (và chỉ trong trường hợp của tôi) được xác định bởi Tìm kiếm
lệnh ở dòng 2.
- Các
Chìa khóa
lệnh gửi một <ENTER>
(hoặc <RETURN>
nếu bạn thích) vào cùng một cửa sổ Stata.
Bây giờ, hãy xem tập lệnh khởi chạy đã sửa đổi của tôi, tập lệnh này gọi statdoc.xdo
ở dòng thứ ba đến dòng cuối cùng (Tôi đã thêm một phần ở phía trước để nhận biết xem đối số được cung cấp có chỉ ra các loại tệp Stata cụ thể hay không—các lệnh sử dụng khác nhau là cần thiết để xử lý từng lệnh một cách duyên dáng¦ ví dụ của tôi chưa hoàn chỉnh, nhưng đây là các loại tệp Tôi sử dụng trong phần lớn công việc của mình):
# Kiểm tra xem KHÔNG có đối số hay không. Nếu không, không làm gì cả.
nếu [ -z "$1" ]
sau đó
nghỉ
# Nếu không, hãy đặt tiền tố thành giá trị mặc định, sau đó kiểm tra
# tên tệp kết thúc bằng .hlp, .sthlp, .ado, .do hay .gph
khác
tiền tố = "sử dụng"
nếu [ ${1##*.} = "hlp" ] || [ ${1##*.} = "sthlp" ] || [ ${1##*.} = "ado" ] || [ ${1##*.} = "làm" ]
sau đó
# Nếu tên tệp KHÔNG kết thúc bằng một trong bốn tiền tố đó thì
# đổi tiền tố thành "doedit" để Stata mở tài liệu bằng
# trình chỉnh sửa tập tin do.
tiền tố="doedit"
fi
# Nếu tên tệp kết thúc bằng .gph, thì hãy thay đổi tiền tố thành "doedit" để
# Stata mở tài liệu bằng trình xem/chỉnh sửa biểu đồ.
nếu [ ${1##*.} = "gph" ]
sau đó
tiền tố="đồ thị sử dụng"
fi
nghỉ
fi
# Kiểm tra xem xstata-mp v17 có chạy không
exit_code_pidof_xstata_mp=$(pidof /usr/local/stata17/xstata-mp)
# nếu xstata-mp v17 KHÔNG chạy, hãy khởi chạy nó với đối số $1
nếu [ -z "$exit_code_pidof_xstata_mp" ]
sau đó
/usr/local/stata17/xstata-mp -q $1; thoát >/dev/null
# nhưng nếu xstata-mp v17 IS đang chạy, thay vào đó hãy đưa nó lên phía trước
khác
# Đầu tiên, gọi statadoc.xdo với tiền tố là đối số đầu tiên,
# và đường dẫn tệp được cung cấp làm đối số thứ hai
/usr/share/stata17/bin/statadoc.xdo "$prefix" " $1"
wmctrl -ia "$(wmctrl -lp | grep "$(pgrep /usr/local/stata17/xstata-mp)" | tail -1 | awk '{ print $1 }')"; thoát > /dev/null
fi
Lưu ý: Đây là giải pháp cho Gnome chạy trên Xorg.