Bashスクリプトを変更せずにFreeBSDで実行できますか?

Bashスクリプトを変更せずにFreeBSDで実行できますか?

私が間違っている場合は訂正してください:

  • 「sh」スクリプト! = "配布"スクリプト
  • LinuxスクリプトはBashで書かれています。
  • 通常、Bashスクリプト#!/bin/sh
  • GNU/Linux では/bin/shBash です。
  • FreeBSDでは/bin/shbashではありませんが、本当です。sh

したがって、FreeBSDでLinuxスクリプトを使用してシェルで実行するには、./script.shBashではなく "sh"でBashスクリプトを実行します。なぜなら/bin/shFreeBSD では Bash ではないからです。

Bashスクリプトを変更せずに実行する方法はありますか?もしそうなら、スクリプトファイルの文が#!/bin/sh他の場所を指すように変更されていませんか?

可能であれば、Zshを介してBashスクリプトを実行したいと思います。 Bashをインストールしたくないので、ZshはBashスクリプトを実行できるので...

答え1

スクリプトを引数として使用して、必要なシェルを呼び出すことができます。

bash ./script.sh

答え2

私はFreeBSDを直接実行します。次のコマンドを使用してスクリプトを起動すると、OS間の互換性が大幅に向上することがわかりました。

#!/usr/bin/env bash

答え3

あなたが間違っているとき、あなたは訂正を求めます。私は努力します:

  • Linuxスクリプトはbashで書かれています。:まあ、一部はPOSIX互換シェル用に書かれていますが、bash他のものはdashPOSIX互換シェルで動作すると予想されます。
  • Bash スクリプトは通常 #!/bin/sh です。非標準機能に依存する場合は、shebangをbash使用することをお勧めします。#!/bin/bash
  • GNU/Linux では、/bin/sh は Bash です。分布によって異なります。たとえば、Debianでも使用できますdashmksh
  • FreeBSDでは、/bin/shはbashではなく、実際のshです。。多くの実装がありますsh。どちらが「本物」ですか? FreeBSDはshAlmquistシェルdashまたはNetBSDに基づいていますsh。 OpenBSDには、ベースの多くの商用Unicesはksh88(Unix / POSIX仕様のベース)にpdksh基づいています。 Unixベースのsh一部のシェルは、Unix互換の実装で認証された唯一の2つのシェルです(正しいフラグと正しい環境で構築されている場合)。ksh88bashsh

shebang を含むスクリプトが存在して/bin/sh実行されるようにするには、zshスクリプトを に渡そうとしますが、zshスクリプトが別のスクリプトを呼び出す限り (修正したくない場合) 失敗します。

だから私はそれが/bin/shあなたから可能であると思いますzshしかし、これはお勧めできません。、起動時間に大きな影響を与えたり、一部のLinuxスクリプトには役に立たない可能性があります。

答え4

/bin/bashLinuxベースで作成されたスクリプトを変更せずにFreeBSDで実行するには、FreeBSD/usr/local/bin/bashにコピーして実行するだけです。/bin/bash

関連情報