web-dev-qa-db-ja.com

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

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

  • "sh"スクリプト!= "bash"スクリプト
  • LinuxスクリプトはBashで書かれています
  • Bashスクリプトは通常#!/bin/sh
  • GNU/Linuxでは、/bin/shはBashです
  • FreeBSDでは、/bin/shはbashではなく、真のshです。

FreeBSDの./script.shはBashではないため、FreeBSDでLinuxスクリプトを使用したい場合、シェルで/bin/shを実行すると、Bashではなく "sh"でBashスクリプトが実行されます。

これらのBashスクリプトを変更せずに実行する方法はありますか?それで、スクリプトファイルの#!/bin/shステートメントを他の場所を指すように変更しないでください。

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

7
user1115057

スクリプトをパラメーターとして使用して、お気に入りのシェルを呼び出すことができます。

bash ./script.sh
5
arved

あなたはあなたが間違っていたときにあなたを訂正するように頼みました。私が試してみます:

  • Linuxスクリプトはbashで書かれています:まあ、いくつかはbashのために書かれ、他はdashのために書かれています。 POSIX準拠のシェルで使用できます。
  • Bashスクリプトは通常#!/ bin/sh非標準のbash機能に依存している場合は、#!/bin/bashシバン
  • GNU/Linuxでは、/ bin/shはBashですディストリビューションによって異なります。たとえば、Debianではdashまたはmkshにすることもできます。
  • FreeBSDでは、/ bin/shはbashではなく、真のshです。 shの実装はたくさんあります。どちらが「本当」ですか? FreeBSDでは、shdashまたはNetBSD shのようなAlmquistシェルに基づいています。 OpenBSDではpdkshに基づいており、多くの商用Unicesではksh88(Unix/POSIX sh仕様の基礎)に基づいています。一部のksh88ベースのシェルとbashは、Unix準拠のsh実装であることが認定されている唯一の2つのシェルです(正しいフラグでビルドされた場合と、正しい場合)。環境)。

/bin/sh Shebangを含むスクリプトがあり、zshによって実行されるようにしたい場合は、zshにスクリプトを渡してみることができますが、このスクリプトが別のスクリプトを呼び出すとすぐに失敗します(そしてそれを変更したくない)。

ですから、/bin/shからzshへのシンボリックリンクが存在する可能性があるだけです。 しかし、これを実行することはお勧めしません。これは、起動時間に劇的な影響を与える可能性があり、一部のLinuxスクリプトでは役に立たないこともあります。

2
Philippos

私は自分でFreeBSDを実行しています。次のスクリプトを開始すると、OS間の互換性が大幅に向上することがわかりました。

#!/usr/bin/env bash
2
scriptythekid

FreeBSDで/bin/bashを使用してLinuxベースの記述されたスクリプトを変更せずに実行したい場合は、FreeBSDで/usr/local/bin/bash/bin/bashにコピーするだけで機能します。

0
Ashish Tiwari