3

bash スクリプトには、OS のバージョンなどに基づいてさまざまなコマンドを実行する「公式の」方法があります。つまり、基本的に一度上部に設定すると、他の場所でも同じように呼び出すことができます。エイリアスを使用しようとしましたが、それはがらくたのようで、一部のシステムでは実際には機能しません (1 つは win-bash を使用する Windows 7 です)。

たとえば、これは私が試したことです:

if [ "$(uname)" = "Darwin" ]; then
    alias p4cli=./bin/p4
else
    alias p4cli=C:\bin\p4.exe
fi

p4cli login

私が使えばMacでもshopt -s expand_aliases動きますが、win-bashにはshoptがありません。これを行うには、エイリアスよりも良い方法があると思いますか?

4

4 に答える 4

2

bashで基盤となるOSを判別するには、env変数に依存することをお勧めしますOSTYPE。bashのマンページには、変数OSTYPEにオペレーティングシステムの名前が格納されていると記載されています。

OSTYPEbashが実行されているオペレーティングシステムを説明する文字列に自動的に設定されます。デフォルトはシステムに依存します。

if [[ "$OSTYPE" == "darwin"* ]]; then
   p4cli="./bin/p4"
else
   p4cli="C:\bin\p4.exe"
fi

"$p4cli" login
于 2012-12-11T19:45:30.637 に答える
1

呼び出し元のプロセスにp4cli、正しいディレクトリをそのPATH変数に追加する責任を負わせます。p4cli loginそうすれば、正確な場所を気にせずに電話をかけるだけで済みます。

おそらく、これはマシン固有(または少なくともOS固有)から行うでしょう。これにより.bash_profile、正しいディレクトリをハードコーディングすることができます。

于 2012-12-11T19:45:14.387 に答える
1

エイリアスではなく、変数を使用します。

if [ "$(uname)" = "Darwin" ]; then
    p4cli=(./bin/p4)
else
    p4cli=('C:\bin\p4.exe')
fi

"${p4cli[@]}" login

必要に応じて後でコマンドに引数を追加できるように、変数配列を作成します。

于 2012-12-11T19:42:04.063 に答える
0

コマンドを変数に保存するのはどうですか?

if [ "$(uname)" = "Darwin" ]; then
    p4cli='./bin/p4'
else
    p4cli='C:\bin\p4.exe'
fi

$p4cli login
于 2012-12-11T19:43:48.907 に答える