web-dev-qa-db-ja.com

ドットファイルをシステムに依存しないようにする方法は?

仕事の関係で、最近、OS Xの使用を開始し、Linuxと同様のエクスペリエンスを得るために、自作を使用してセットアップしました。

ただし、設定にはかなりの違いがあります。 1つだけのシステムに配置する必要があるものもあります。私のドットファイルはgitリポジトリにあるので、どのような種類のスイッチを設定できるのか疑問に思っていたので、一部の構成はLinuxシステムでのみ読み取られ、その他の構成はOSXでのみ読み取られます。

Dotfilesについては、特に.bash_profilesまたは.bash_alias

21
k0pernikus

ドットファイルを可能な限り移植可能に保ち、特定のバージョンのツールを必要とするOS依存の設定やスイッチを避けます。すべてのシステムで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
22
Marco

.bash_profilesや友達など、実際に実行されるファイルのみに関心がある場合は、たとえば、 unameは、コードが実行されているシステムに基づいて区別します。

たとえば、完全にテストされておらず、現在Linuxを使用している場合は、試してみるOSXがないという警告があります。

alias ll='ls -lFA'

mac OS Xの場合:

alias ll='ls -lFAx'

(どこ -x OSXの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であり、 name -sはPOSIXで必要です (ありがとう Marco for これを指摘 ))、そして文字列比較に基づくシェルスクリプト分岐の構文は同じであること。他の基準に基づいてテストすることもできます。たとえば、/ etc/lsb_releaseを検索したり、/ proc/sys/kernel/ostypeに「Linux」が含まれているかどうかを確認したり、その他のテストを考え出すことができます。

3
a CVn