首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >autoconf使用sh,我需要SHELL=BASH,如何强制autoconf使用bash?

autoconf使用sh,我需要SHELL=BASH,如何强制autoconf使用bash?
EN

Stack Overflow用户
提问于 2008-10-02 06:10:29
回答 5查看 4.1K关注 0票数 8

我正在运行autoconf并配置将SHELL设置为'/bin/sh‘。这就产生了巨大的问题。如何对autoconf强制SHELL为'/bin/bash‘?

我正在尝试让它在osx上运行,它在linux上工作。Linux正在使用SHELL=/bin/bash。osx缺省为/bin/sh。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2008-10-02 06:43:57

我和GCC在Solaris上也有类似的问题--我使用的是“标准”技术:

代码语言:javascript
复制
CONFIG_SHELL=/bin/bash ./configure ...

(或者,实际上我使用/bin/ksh,但是通过设置CONFIG_SHELL环境变量,您可以告诉autoconf脚本使用哪个shell。)

我检查了git和gd的配置脚本(它们恰好被提取出来了),以确认这不是一个GCC特有的env var。

票数 9
EN

Stack Overflow用户

发布于 2009-07-18 20:28:19

什么是“大问题”?autoconf很难生成一个能处理大量shell的配置脚本。如果您有一个autoconf正在编写的结构的示例是不可移植的,请将其报告给autoconf邮件列表。另一方面,如果您遇到的问题是由于configure.ac中的shell代码不可移植(例如,您正在使用bashism),那么解决方案是要么停止使用不可移植的代码,要么要求用户在配置时显式地设置SHELL或CONFIG_SHELL。

听起来您遇到的问题是在用户运行configure的环境中出现的。在Linux上,您的用户将SHELL设置为/bin/bash,但在OS上将其设置为/bin/sh。autoconf生成的配置脚本对运行它的shell执行一些初始测试,如果提供的shell缺少某些功能,则会尝试使用不同的shell重新执行自身。但是,如果您在configure.ac中引入了不可移植的shell代码,那么您就违反了autoconf的一个主要原则--即配置脚本应该是可移植的。如果您确实想在shell代码中使用bashism,那么您需要您的用户将SHELL=/bin/bash作为参数传递给配置脚本。这不是autoconf中的bug,但会被许多人认为是项目构建中的bug。

票数 5
EN

Stack Overflow用户

发布于 2012-03-08 09:41:24

Autoconf被认为可以通过生成一个可以在“任何地方”运行的脚本来解决可移植性问题。这就是为什么它会生成奇怪的代码,比如:

代码语言:javascript
复制
if test X$foo = X ; then ...   # check if foo is empty

而不是:

代码语言:javascript
复制
if [ "$x" = "" ] ; then ...

这种粗糙的代码可能曾经允许这些脚本在某个古老的Ultrix系统或其他系统上运行。

由于shell差异而无法运行的配置脚本就像是带着10升汽油和3个备用轮胎参加一级方程式比赛。

如果您正在使用Autoconf开发配置脚本,并且它对shell是Bash还是OSX shell很敏感,那么您可能做错了什么,或者Autoconf人员破坏了某些东西。如果它来自您,请通过使其可移植来修复您要添加到脚本中的任何shell片段。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/161064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档