如何在所有shell脚本中添加“shopt -s compat31”命令?

问题描述:

Bash包从bash-3.2-32更新为bash-4.1.2-15.el6_5.1.x86_64。升级后,正则表达式匹配条件运算符=〜可以正则表达式匹配停止工作。如何添加如何在所有shell脚本中添加“shopt -s compat31”命令?

shopt -s compat31 

命令在所有shell脚本中?我不想在所有脚本中逐个添加此命令。

我已将上述命令添加到.bashrc中,但兼容性未反映在shell脚本上。 命令结果:

compat31 is off in script. 
[[email protected] log]# sh abc.sh 
compat31  off 

Compat31 is on at command prompt screen. 
[[email protected] log]# shopt |grep compat31 
compat31  on 
[[email protected] log]# 
+1

您*可能*能够将'/ bin/bash'变成一个符号连接到一个脚本,该脚本运行'shopt -s compat31',然后调用'bash'。我不知道这样做会有多好,或者在这个过程中会发生什么。 – 2014-09-26 06:44:26

+0

根据你的说法,我们首先从/ bin/bash创建符号链接到脚本。例如:ln -s/bin/bash abc.sh。 abc.sh运行shopt命令。这是对的吗? – yogesh 2014-09-26 07:35:14

+0

您将不得不以某种方式编辑脚本; shell选项不会传播到子shell,例如从具有选项集的shell运行脚本时。 – chepner 2014-09-26 12:48:53

一些观察:

  • 正则表达式运算符changed in 3.2alpha,但我不能看到后,任何的调整。换句话说,没有提到你提到的版本之间的变化。
  • 3.2alpha中=~行为的变化仅仅是将引用的右侧字符串视为文字字符串匹配而不是正则表达式。你从字面上只需删除任何引号就可以使你的旧代码与3.2alpha一起工作。
  • 正则表达式运算符仍然非常有效,并且很可能比3.1更好。
  • 除非你绝对不能更改代码,否则最好是与当前版本兼容。过多地迎合旧代码使得以后迁移更加困难,并且更容易产生微妙的错误。
+0

默认情况下,RHEL6.5机器使用bash-4.1.2-15.el6_5.1.x86_64版本。那么,如何处理compat31的兼容性呢? – yogesh 2014-09-26 09:33:52

+0

你是什么意思? – l0b0 2014-09-26 12:02:05

+0

任何用于启用compat31的bash4.1.2包的解决方案? – yogesh 2014-09-29 04:27:52

一种选择是与

bash -O compat31 oldscript.bash 

运行的脚本,而不是编辑脚本本身。

+0

有多个脚本和内部调用其他脚本。所以,如何处理所有脚本的相同内容。 – yogesh 2014-09-29 04:26:29