Có một số dòng tmux.conf của tôi mà tôi chỉ muốn thực hiện nếu HĐH của tôi là Mac. Tuy nhiên, tôi muốn sử dụng tmux.conf của mình trên nhiều hệ điều hành khác nhau. Làm cách nào tôi có thể tạo một lệnh có điều kiện cho HĐH mà tmux hiện đang chạy?
Có một số dòng tmux.conf của tôi mà tôi chỉ muốn thực hiện nếu HĐH của tôi là Mac. Tuy nhiên, tôi muốn sử dụng tmux.conf của mình trên nhiều hệ điều hành khác nhau. Làm cách nào tôi có thể tạo một lệnh có điều kiện cho HĐH mà tmux hiện đang chạy?
Câu trả lời:
Sử dụng if-shell
lệnh:
if-shell "uname | grep -q Darwin" "tmux-cmd1; tmux-cmd2;" "tmux-cmd3; tmux-cmd4"
Bạn có thể muốn đặt các lệnh dành riêng cho hệ điều hành trong các tệp riêng biệt và thực thi chúng thông qua lệnh "tệp nguồn".
if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
if-shell
và run-shell
tmux hiện không đồng bộ (kể từ tmux 1.7); chúng thực sự chạy lệnh shell của chúng trong nền và bất kỳ lệnh tmux nào chúng chạy sẽ chỉ được thực thi sau bất kỳ lệnh nào xuất hiện sau lệnh if-shell
hoặc run-shell
chính lệnh đó ( tmux là luồng đơn). Thực tế, nếu bạn sử dụng if-shell
hoặc run-shell
tham gia ~/.tmux.conf
, phiên ban đầu (và bất kỳ phiên, cửa sổ hoặc cửa sổ nào được tạo rõ ràng được tạo thông qua ~/tmux.conf
) sẽ thiếu bất kỳ cấu hình tmux nào được sắp xếp thông qua if-shell
hoặc run-shell
các lệnh.
if-shell
hoạt động như mong đợi đối với tôi với tmux 1.8. Tôi đang sử dụng nó để đặt chuỗi tiêu đề chỉ dành cho SSH: github.com/blueyed/dotfiles/commit/
Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 có câu trả lời. Ngoài ra Chris Johnsen xứng đáng nhận được rất nhiều tín dụng vì đã giúp đỡ mọi người về vấn đề GitHub tại đây: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987
Về cơ bản, bạn thiết lập một tập lệnh shell được gọi là safe-reattach-to-user-namespace
kiểm tra sự tồn tại của lệnh reattach thực sự.
#! /usr/bin/env bash
# If reattach-to-user-namespace is not available, just run the command.
if [ -n "$(command -v reattach-to-user-namespace)" ]; then
reattach-to-user-namespace $@
else
exec "$@"
fi