Karena bekerja, saya baru-baru ini mulai menggunakan OS X dan telah mengaturnya menggunakan homebrew untuk mendapatkan pengalaman yang sama dengan Linux.
Namun, ada beberapa perbedaan dalam pengaturannya. Beberapa hanya perlu ada di satu sistem. Ketika dotfiles saya tinggal di repositori git, saya bertanya-tanya seperti apa saklar yang bisa saya atur, sehingga beberapa konfigurasi hanya bisa dibaca untuk sistem Linux dan lainnya untuk OS X.
Adapun dotfiles, saya maksudkan, antara lain, ke .bash_profiles
atau .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, diterjemahkan ke file rc yang sesuai. File rc utama saya mencoba untuk menjaga sistem agnostik, sedangkan.local
versi memiliki pengaturan sistem khusus. Jika Anda ingin semuanya dalam satu repo, Anda dapat memiliki sistem dir dan symlink rcfile.local dengan yang ada di direktori yang benar.Jawaban:
Pertahankan dotfiles senyaman mungkin dan hindari pengaturan yang bergantung pada OS atau sakelar yang memerlukan versi khusus alat, mis. Hindari sintaksis GNU jika Anda tidak menggunakan perangkat lunak GNU pada semua sistem.
Anda mungkin akan mengalami situasi di mana diinginkan untuk menggunakan pengaturan khusus sistem. Dalam hal ini gunakan pernyataan sakelar dengan pengaturan individual:
Jika file konfigurasi aplikasi sewenang-wenang memerlukan opsi yang berbeda, Anda dapat memeriksa apakah aplikasi menyediakan sakelar kompatibilitas atau mekanisme lainnya. Untuk
vim
, misalnya, Anda dapat memeriksa versi dan patchlevel dukungan fitur versi lama, atau versi dikompilasi dengan set fitur yang berbeda, tidak memiliki. Cuplikan contoh dari.vimrc
:sumber
uname -s
sepertiuname
. uname singkatan dari nama Unix.-s
?uname
sendirian telah menjadi cara kanonik untuk melakukannya selama beberapa dekade dan ditentukan oleh POSIX. Yang asliuname
(di PWB Unix) tidak mengambil opsi apa pun.-s
dari jawaban ini dan saya akan mengingatnya untuk skrip saya di masa depan.set
benar-benar seharusnya U + 201C dan U + 201D daripada U + 0022?Jika Anda hanya peduli dengan file yang benar-benar dieksekusi, seperti .bash_profiles dan teman-teman, Anda mungkin dapat menggunakan mis
uname
untuk membedakan berdasarkan sistem yang dijalankan oleh kode.Misalnya , benar-benar belum teruji dan dengan peringatan bahwa saya tidak memiliki OS X untuk mencoba berbagai hal, jika saat ini ada di Linux:
dan di Mac OS X:
(di mana
-x
membuat OS Xls
melakukan sesuatu yang dilakukan GNU secara default), maka mereka dapat digabungkan menjadi sesuatu seperti ini:Satu-satunya persyaratan kemudian adalah bahwa
uname -s
sebagian besar berfungsi dengan cara yang sama (seharusnya, karena kedua sistem cukup POSIX-y dan uname -s diperlukan oleh POSIX (terima kasih Marco untuk menunjukkan ini )), dan bahwa sintaks untuk percabangan skrip shell berdasarkan perbandingan string adalah sama. Anda mungkin dapat menguji berdasarkan kriteria lain juga; misal, Anda bisa mencari / etc / lsb_release, periksa apakah / proc / sys / kernel / ostype berisi "Linux", atau tes apa pun yang dapat Anda lakukan.sumber
Darwin
, saya baru saja memeriksa.-o
Sakelar uname bukan POSIX dan gagal pada banyak sistem, misalnya Solaris.-s
wajib pada POSIX dan cara yang paling kompatibel. IEEE Std 1003.1OSTYPE
tidak tersedia dalam shell POSIX. Ini akan gagal misalnya pada instalasi FreeBSD default dan hanya dapat digunakan dalam.bashrc
atau.zshrc
. Ini tidak bekerja dengan andal dalam.profile
,.alias
dll. Karena kita berbicara tentang kompatibilitas di sini, saya menyarankan untuk pergi dengan cara yang aman, daripada mengandalkan fitur shell tertentu, yang tidak dijamin tersedia di setiap sistem.