R. *_* Du 5 linux shell bash rhel shopt
我在尝试弄清楚如何为xpg_echo将在我的 Linux RedHat 系统 (7.4) 上运行的每个 shell 打开 bash 选项时遇到了一些麻烦。
我知道我可以通过使用来获得我需要的东西(目的是随时扩展反斜杠转义,因为所有 shell 都是从 HP-UX 服务器移植的)shopt -s xpg_echo,它在大多数情况下工作正常。
现在我的问题是在哪里“系统范围”或“全局”打开此选项,以便我将运行的每个 shell 都使用它。
我尝试将shopt -s xpg_echo一个自定义 shell 放入/etc/profile.d/myshell.sh.
它适用于:
/etc/bashrc)/etc/profile)#!/bin/bash没有 bash shebang 的 shell 程序(第一行没有)但我无法让它在以下情况下工作,因为/etc/profile.d/脚本似乎没有获取来源,并且该xpg_echo选项不是从调用 shell 继承的:
echo "a\tb")作为bash参数时,例如bash /tmp/mytest.sh#!/bin/bash当运行第一行有 bash shebang ( ) 的 shell 脚本时我想知道是否有任何方法可以xpg_echo在需要运行 shell 的每种情况下打开 shell 选项。
注意:我使用的是 GNU bash,版本 4.2.46
感谢您向我指出另一个相关主题。
对我来说,关键是使用 BASH_ENV 变量。
正如 bash 参考手册中所述,有多种打开 shell 的方法,其中给我带来麻烦的是“非交互”调用它。
/etc/profile为了解决非交互式 shell 不运行任何Nor的事实/etc/bashrc,我在 中创建了一个专用的 shell 脚本/etc/profile.d/,例如“custom_shopts.sh”,其中仅包含我希望在每个会话和同一脚本中使用的 shopt 选项我将导出变量BASH_ENV=/etc/profile.d/custom_shopts.sh
因此,在我运行的任何 shell 中(登录 shell、交互式 shell 或非交互式 shell,但 除外bash --posix),/etc/profile.d/custom_shopt.shshell 脚本将运行并定位我期望的 shopt 选项。