1

ハウスキーピング用のラッパーとオペレーティング システムに基づく変数のセットアップを含む、オープン ソースのクロス プラットフォーム ユーティリティを開発しています。このハウスキーピングは独自のスクリプト内にあり、ほとんどの場合、生成されます。

シンプルさと DRYness のために、オペレーティング システムに基づいて実行する別のスクリプトを選択する単一の単純なスタートアップ スクリプトがあれば幸いです。

本質的に、これは私が望むものです:

::# Somehow run this on osx/windows/linux +++
switch OSTYPE
when "win32"
   windows_script.bat ARGS
when "linux"
   linux_script.sh ARGS
when "darwin"
   darwin_script.sh ARGS
....

そうすれば、クロス プラットフォーム アプリケーションを作成するときに対処する必要がさらに少なくなります。値は、別のアプリを開発するときにどのスクリプトを実行するかという特別なケースではありません

外部依存関係をインストールせずにこれを達成する方法はありますか?

4

2 に答える 2

2

これを思いついたのは2月のこと

${0+: \} <#}
exec powershell $(cygpath -m $(realpath $0)) $*
#>

これは、Windows 上の PowerShell または Bash から PowerShell スクリプトを実行する方法です。PowerShell から実行する場合は、

${0+: \}

これは基本的に変な名前の variable0+: \であり、おそらく空のため NOOP です。次に、あなたは持っています

<#}
exec powershell $(cygpath -m $(realpath $0)) $*
#>

これは PowerShell ブロッ​​ク コメントです。これも何もしません。その後のコードはすべて PowerShell によって実行されます。Bash から同じスクリプトを実行すると、次のようになります。

${0+: \} <#}

これは本質的に実行されます

: '}' '<#'

再び、NOOP、続いて

exec powershell $(cygpath -m $(realpath $0)) $*

これにより、Bash シェルが PowerShell に置き換えられ、残りのスクリプトが正しく実行されます。これは問題の完全な解決策ではありませんが、開始点になる可能性があります。

于 2014-08-23T04:38:33.060 に答える