.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 -s
returnを行います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
。