私が間違っている場合は修正してください:
#!/bin/sh
/bin/sh
はBashです/bin/sh
はbashではなく、真のsh
です。FreeBSDの./script.sh
はBashではないため、FreeBSDでLinuxスクリプトを使用したい場合、シェルで/bin/sh
を実行すると、Bashではなく "sh"でBashスクリプトが実行されます。
これらのBashスクリプトを変更せずに実行する方法はありますか?それで、スクリプトファイルの#!/bin/sh
ステートメントを他の場所を指すように変更しないでください。
可能であれば、Zshを介してBashスクリプトを実行したいと思います。 Bashをインストールしたくない、そしてZshはBashスクリプトを実行できるので...
スクリプトをパラメーターとして使用して、お気に入りのシェルを呼び出すことができます。
bash ./script.sh
あなたはあなたが間違っていたときにあなたを訂正するように頼みました。私が試してみます:
bash
のために書かれ、他はdash
のために書かれています。 POSIX準拠のシェルで使用できます。bash
機能に依存している場合は、#!/bin/bash
シバンdash
またはmksh
にすることもできます。sh
の実装はたくさんあります。どちらが「本当」ですか? FreeBSDでは、sh
はdash
またはNetBSD sh
のようなAlmquistシェルに基づいています。 OpenBSDではpdksh
に基づいており、多くの商用Unicesではksh88(Unix/POSIX sh
仕様の基礎)に基づいています。一部のksh88
ベースのシェルとbash
は、Unix準拠のsh
実装であることが認定されている唯一の2つのシェルです(正しいフラグでビルドされた場合と、正しい場合)。環境)。/bin/sh
Shebangを含むスクリプトがあり、zsh
によって実行されるようにしたい場合は、zsh
にスクリプトを渡してみることができますが、このスクリプトが別のスクリプトを呼び出すとすぐに失敗します(そしてそれを変更したくない)。
ですから、/bin/sh
からzsh
へのシンボリックリンクが存在する可能性があるだけです。 しかし、これを実行することはお勧めしません。これは、起動時間に劇的な影響を与える可能性があり、一部のLinuxスクリプトでは役に立たないこともあります。
私は自分でFreeBSDを実行しています。次のスクリプトを開始すると、OS間の互換性が大幅に向上することがわかりました。
#!/usr/bin/env bash
FreeBSDで/bin/bash
を使用してLinuxベースの記述されたスクリプトを変更せずに実行したい場合は、FreeBSDで/usr/local/bin/bash
を/bin/bash
にコピーするだけで機能します。