.bash_profileでオペレーティングシステムを確認するには? [コピー]

.bash_profileでオペレーティングシステムを確認するには? [コピー]

.bash_profile私のホストMacBook Proには、Dreamhost Linuxシステムで変更なしに使用したいファイルがあります。ただし、次のようにmacOSでのみ機能するいくつかの行がありますalias mvim="/Applications/MacVim.app/Contents/MacOS/MacVim"

bashがmacOSまたはDebian(またはmacOSではなく)で実行されているかどうかをテストし、macOSで実行したときに上記の行と他の行をいくつか実行する方法はありますか?ここにある他の質問には、私が使用しているLinuxディストリビューションを見つける方法が含まれていますが、ここではmacOSで実行されているかLinuxで実行されていますが、知っておく必要があり、macOSでLinuxディストリビューションを知るためのソリューションはありません。

答え1

OSXではuname -sreturnを行いますDarwin(ほとんどのLinuxunameプログラムはを返しますLinux)。

一般的に(個人的な使用を除く)、unameさまざまなシステムに固有の特徴があります。では、一貫した情報を提供するautoconfスクリプトが使用されますconfig.guess

たとえば、私のDebian 7では

x86_64-pc-linux-gnu

OSXではエル・キャピタン

x86_64-apple-darwin15.5.0

シェルで if-then-else 文または Case 文を使用できます。後者はメンテナンスが簡単です。

case $(config.guess) in
*linux*)
    DoSomeLinuxStuff
    ;;
*apple-darwin*)
    DoSomeMacStuff
    ;;
esac

多くのLinuxディストリビューションは出力に情報を追加しますunameが、これは特定の状況でのみ役立ちます。持ついいえ追加された情報の基準です。

私のDebian 7の場合:

$ uname -v
#1 SMP Debian 3.2.81-1

OSXは全く異なります。

$ uname -v
Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64

追加資料:

答え2

if [[ $(uname -s) == Linux ]]
then
    doThis
else
    doThat
fi

答え3

.bash_profile代替ソリューションとして、ポータブル部分とシステム固有の部分に分けることができます。

基本に.bash_profile以下を追加します。

if [ -f ~/.bash_profile_local ] ; then
    . ~/.bash_profile_local
fi

次に、特定のシステムにのみ適用されるカスタム設定を.bash_profile_localそのシステムに配置します。カスタマイズした内容がない場合は、このファイルを作成する必要はありません。

別の手順で、一部のシステム間で特定の部分を共有し、他のシステムで共有したくない場合は、完全なSYSVスタイルのrc.dディレクトリを作成できます。存在する.bash_profile

if [ -d ~/.bash_profile.d ] ; then
    for f in ~/.bash_profile.d/* ; do
        if [ -f "$f" ] ; then
            . "$f"
        fi
    done
fi

その後、ディレクトリを作成すると、.bash_profile.dここに置いたすべてのファイルが.bash_profile

関連情報