2013-07-12 1 views
7

Извините, заголовок может быть немного раздражающим, но я не знал ничего лучшего. Во всяком случае, я хочу, чтобы скрипт bash работал над FreeBSD, OpenBSD и Linux без его модификации, но bash не находится в одном месте в Linux и BSD.Как получить скрипт bash, работающий над FreeBSD, OpenBSD и Linux без его модификации?

Итак, если я напишу #!/bin/bash, тогда он не будет работать на BSD, потому что оболочка bash находится в /usr/local/bin/bash. Есть ли какое-нибудь решение, чтобы заставить этот скрипт работать на обоих?

Или мне действительно нужно отправить два сценария с разными путями ...?

+3

Также обратите внимание, что в системе FreeBSD нет никакой гарантии, что bash будет доступен вообще, это необязательная установка ... – fvu

ответ

12

Использование env в shebang (#!/usr/bin/env bash) должно сделать скрипт OS агностиком.

1

Мне нравится ответ об использовании #!/usr/bin/env bash Это интересный и отличный ответ, но это будет работать, только если bash находится на пути.

Другим вариантом может быть использование #!/bin/sh, который является наиболее универсально совместимым местоположением оболочки. Затем, скрипт что-то делает в sh, например, проверьте, где установлен bash (если установлен bash). Другим вариантом может быть наличие bash для обоих местоположений. Создание другой установки может показаться излишним, но эта цель может быть выполнена так же просто, как создание жесткой ссылки, так что bash фактически существует в обоих местах.