konfigurasi tmux bersyarat ke OS

41

Ada beberapa baris tmux.conf yang ingin saya jalankan hanya jika OS saya adalah Mac. Namun, saya ingin menggunakan tmux.conf di beberapa OS yang berbeda. Bagaimana saya bisa membuat perintah untuk OS yang menjalankan tmux saat ini?

omong kosong
sumber
1
versi mendeteksi stackoverflow.com/questions/35016458/...
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

51

Gunakan if-shellperintah:

if-shell "uname | grep -q Darwin" "tmux-cmd1; tmux-cmd2;" "tmux-cmd3; tmux-cmd4"

Anda mungkin ingin menempatkan perintah khusus OS dalam file terpisah, dan menjalankannya melalui perintah "file sumber".

if-shell "uname | grep -q Darwin" "source-file .tmux-macosx" "source-file .tmux-linux"
chepner
sumber
8
Perintah if-shelldan run-shell tmux saat ini tidak sinkron (pada tmux 1.7); mereka secara efektif menjalankan perintah shell mereka di latar belakang, dan perintah tmux apa pun yang mereka jalankan hanya akan dieksekusi setelah perintah yang datang setelah if-shellatau run-shellperintah itu sendiri ( tmux adalah single-threaded). Secara efektif, jika Anda menggunakan if-shellatau run-shelldalam ~/.tmux.conf, sesi awal (dan sesi, jendela, atau panel yang dibuat secara eksplisit dibuat melalui ~/tmux.conf) akan kekurangan konfigurasi tmux yang diatur melalui if-shellatau run-shellperintah.
Chris Johnsen
1
@ChrisJohnsen if-shellbekerja seperti yang diharapkan untuk saya dengan tmux 1.8. Saya menggunakannya untuk mengatur set-title-string hanya untuk SSH: github.com/blueyed/dotfiles/commit/…
blueyed
2
Ini harus diterima; itu cara yang tepat untuk melakukannya.
Chev
11

Jimeh https://github.com/jimeh/dotfiles/commit/3838db8 memiliki jawabannya. Chris Johnsen juga layak mendapatkan banyak pujian karena membantu orang-orang dalam masalah GitHub di sini: https://Github.com/ChrisJohnsen/tmux-MacOSX-pasteboard/issues/8#issuecomment-4134987

Pada dasarnya, Anda membuat skrip shell yang disebut safe-reattach-to-user-namespaceyang memeriksa keberadaan perintah reattach ... nyata.

#! /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
Ivan
sumber