Как правильно сделать сценарий bash переносимым между Linux и FreeBSD? - PullRequest
11 голосов
/ 01 марта 2011

Я работаю над некоторыми bash-скриптами, которые я хотел бы использовать в своих системах Linux и FreeBSD.

Поскольку я в основном работаю в Linux, я привык запускать свои bash-скрипты с

#!/bin/bash

Но это не работает на FreeBSD, поскольку bash живет на /usr/local/bin/bash.Таким образом, во FreeBSD мои сценарии должны начинаться с

#!/usr/local/bin/bash

Так есть ли что-то еще, что я мог бы использовать, который был бы переносим для обеих систем? Я бы предпочел не поддерживать две версиискрипты.

Ответы [ 3 ]

18 голосов
/ 01 марта 2011
#!/usr/bin/env bash

должен добиться цели, при условии, что bash находится где-то на пути.Подробнее см. здесь .

6 голосов
/ 02 марта 2011

Честно говоря, если вы хотите переносимости, вызовите как / bin / sh и код для POSIX.Это менее красиво, но вы столкнетесь с меньшим количеством потенциальных проблем, если вы это сделаете.

2 голосов
/ 27 мая 2012

Используйте #!/bin/sh в обеих системах, если вы хотите быть переносимым и полностью избегать ошибок.

...