我在尝试弄清楚如何为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
.
它适用于:
- 交互式 shell 会话(源自
/etc/bashrc
) - 登录 shell 会话(源自
/etc/profile
) #!/bin/bash
没有 bash shebang 的 shell 程序(第一行没有)
但我无法让它在以下情况下工作,因为/etc/profile.d/
脚本似乎没有获取来源,并且该xpg_echo
选项不是从调用 shell 继承的:
- 当运行 shell 脚本(例如
echo "a\tb"
)作为bash
参数时,例如bash /tmp/mytest.sh
#!/bin/bash
当运行第一行有 bash shebang ( ) 的 shell 脚本时
我想知道是否有任何方法可以xpg_echo
在需要运行 shell 的每种情况下打开 shell 选项。
注意:我使用的是 GNU bash,版本 4.2.46
答案1
谢谢你给我指点另一个相关主题。
对我来说,关键是使用 BASH_ENV 变量。
正如 bash 参考手册中所述,有打开 shell 的几种方法,给我带来麻烦的是当它被“非交互式”调用时。
为了解决非交互式 shell 不运行任何/etc/profile
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.sh
shell 脚本将运行并定位我期望的 shopt 选项。