为什么.bashrc中的alias别名不能用于脚本中和Makefile

下周高级计算机网络课要复现并且汇报A会文章,成功复现就能拿A。我选了篇sketch的,sliding sketch, SIGKDD 20’。

没想到编译发现一定要stdc++11,一堆错误。挨个改Makefile确实可以,但是太费劲,所以想在.bashrc里面加个alias别名,

g++='g++ -std=c++11'

没想到一点用都没有。所以还是改了回去。使用自己写的脚本测试发现,alias在shell脚本中用不了,发现因为如下原因。

为什么alias在shell脚本里用不了

简要说,是因为shell分为交互模式和非交互模式,脚本执行时默认是非交互,普通命令行默认是交互,而alias在非交互模式下默认是无法使用的,需要使用shopt命令支持expand_aliases才行。

但是我发现即便使用了shopt,在脚本后面make时也没设置成stdc++11。有人说是因为,make使用的不是bash,而是sh,所以不会将.bashrc作为配置文件,不管.bashrc里有什么都没用。至于如何改,语焉不详。但是.bashrc里的别名不能用于makefile,这样设计是为了兼容性更好,不会出现由于一台设备上的别名其他设备上没有而使编译变复杂的情况。相关说法如下。

Makefile无法使用~/.bashrc中alias定义的命令别名
Makefile当中使用alias命令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值