Jou*_*aen 4 terminal zsh emulation
所以我有一些设置脚本在工作,它们只适用于bash
(因为它们使用 eg==
或$BASH_SOURCE
)。
它可以使用 zsh 的emulate
命令来获取这些脚本:
emulate bash
source setupscipt.bash
emulate zsh
Run Code Online (Sandbox Code Playgroud)
但这会重置我的 zsh 选项,如“autocd”(在 .zshrc 中设置)。
我应该如何开始和退出 bash 模拟,以便我的选择保持原样?
Zefram 在 20 多年前在 zsh 邮件列表上回答了一个类似的问题:
解决方案是使用一个函数——让我们称之为source_bash
——来获取你的 bash 脚本:
function source_bash {
emulate -L bash
builtin source "$@"
}
Run Code Online (Sandbox Code Playgroud)
诀窍是选项localoptions
(由-L
emulate 调用的参数设置),在手册页中描述如下:
LOCAL_OPTIONS如果在 shell 函数返回时设置此选项,则在进入函数时生效的大多数选项(包括此选项)将被恢复;未恢复的选项是 PRIVILEGED 和 RESTRICTED。否则,仅恢复此选项以及 LOCAL_LOOPS、XTRACE 和 PRINT_EXIT_VALUE 选项。因此,如果这被 shell 函数明确取消设置,则在返回点生效的其他选项将保持不变。shell 函数也可以使用类似“emulate -L zsh”这样的公式来保证自己是一个已知的 shell 配置;-L 激活 LOCAL_OPTIONS。
把这个功能放在你的~/.zshrc
身上,你只需要做一个
$ source_bash setupscipt.bash
Run Code Online (Sandbox Code Playgroud)
必要时。
归档时间: |
|
查看次数: |
773 次 |
最近记录: |