ドットファイルシステムを独立して維持する方法は?

ドットファイルシステムを独立して維持する方法は?

仕事上の理由から最近OS Xを使い始め、Linuxのような経験を得るためにhomebrewを使って設定しました。

ただし、設定には若干の違いがあります。一部は1つのシステムにのみインストールできます。私のドットファイルはgitリポジトリにあるので、特定の設定はLinuxシステムでのみ読み取られ、他の設定はOS Xで読み取るように設定できるスイッチが何であるか疑問に思います。

ドットファイルの場合.bash_profilesまたは.bash_alias

答え1

ポイントファイルをできるだけ移植可能に保ち、特定のバージョンのツールが必要なオペレーティングシステムの設定やスイッチに依存しないでください。たとえば、すべてのシステムでGNUソフトウェアを使用していない場合は、GNU構文を使用しないでください。

システム固有の設定を使用する必要がある状況が発生する可能性があります。その場合は、別の設定を含むswitchステートメントを使用してください。

case $(uname) in
  'Linux')   LS_OPTIONS='--color=auto --group-directories-first' ;;
  'FreeBSD') LS_OPTIONS='-Gh -D "%F %H:%M"' ;;
  'Darwin')  LS_OPTIONS='-h' ;;
esac

アプリケーションの構成ファイルに他のオプションが必要な場合は、そのアプリケーションが互換性スイッチまたは他のメカニズムを提供していることを確認できます。たとえば、vimバージョンとパッチレベルを確認して、以前のバージョンまたは他の機能セットでコンパイルされたバージョンでは利用できなかった機能をサポートできます。サンプルスニペット.vimrc:

if v:version >= 703
  if has("patch769")
    set matchpairs+=“:”
  endif
endif

答え2

uname.bash_profilesなどの実際に実行されているファイルにのみ興味がある場合は、コードが実行されているシステムに応じて区別するために使用できます。

例えば、完全にテストされておらず、現在Linuxを使用している場合は注意事項があります。試してみるOS Xはありません。

alias ll='ls -lFA'

Mac OS Xの場合:

alias ll='ls -lFAx'

-xOS XにlsデフォルトでGNU lsが実行することを許可する)次のように組み合わせることができます。

OS="$(uname -s)"
if test "$OS" = "Darwin"; then
    alias ll='ls -lFAx'
    # ...other OS X-specific things go here...
else if test "$OS" = "Linux"; then
    alias ll='ls -lFA'
    # ...other Linux-specific things go here...
fi
# ...generic things go here...

その後、唯一の要件は、uname -sほぼ同じ方法で作業することです(両方のシステムが合理的にPOSIX-yであり、POSIX には uname -s が必要です。(ありがとうございます。表示~のためこれを指摘する))、文字列比較ベースのシェルスクリプトブランチの構文は同じです。また、他の基準についてテストすることもできます。たとえば、/etc/lsb_releaseを参照して、/proc/sys/kernel/ostypeに「Linux」が含まれていることを確認したり、他のテストを実行したりできます。

関連情報