私が間違っている場合は訂正してください:
- 「sh」スクリプト! = "配布"スクリプト
- LinuxスクリプトはBashで書かれています。
- 通常、Bashスクリプト
#!/bin/sh
- GNU/Linux では
/bin/sh
Bash です。 - FreeBSDでは
/bin/sh
bashではありませんが、本当です。sh
したがって、FreeBSDでLinuxスクリプトを使用してシェルで実行するには、./script.sh
Bashではなく "sh"でBashスクリプトを実行します。なぜなら/bin/sh
FreeBSD では 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
他のものはdash
POSIX互換シェルで動作すると予想されます。 - Bash スクリプトは通常 #!/bin/sh です。非標準機能に依存する場合は、shebangを
bash
使用することをお勧めします。#!/bin/bash
- GNU/Linux では、/bin/sh は Bash です。分布によって異なります。たとえば、Debianでも使用できます
dash
。mksh
- FreeBSDでは、/bin/shはbashではなく、実際のshです。。多くの実装があります
sh
。どちらが「本物」ですか? FreeBSDはsh
Almquistシェルdash
またはNetBSDに基づいていますsh
。 OpenBSDには、ベースの多くの商用Unicesはksh88(Unix / POSIX仕様のベース)にpdksh
基づいています。 Unixベースのsh
一部のシェルは、Unix互換の実装で認証された唯一の2つのシェルです(正しいフラグと正しい環境で構築されている場合)。ksh88
bash
sh
shebang を含むスクリプトが存在して/bin/sh
実行されるようにするには、zsh
スクリプトを に渡そうとしますが、zsh
スクリプトが別のスクリプトを呼び出す限り (修正したくない場合) 失敗します。
だから私はそれが/bin/sh
あなたから可能であると思いますzsh
。しかし、これはお勧めできません。、起動時間に大きな影響を与えたり、一部のLinuxスクリプトには役に立たない可能性があります。
答え4
/bin/bash
Linuxベースで作成されたスクリプトを変更せずにFreeBSDで実行するには、FreeBSD/usr/local/bin/bash
にコピーして実行するだけです。/bin/bash