首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在RLWrap中处理EOF

在RLWrap中处理EOF
EN

Stack Overflow用户
提问于 2019-05-03 07:56:04
回答 1查看 164关注 0票数 2

我使用RLWrap来“驯服”一个非常好的REPL,Dyalog,不幸的是它起源于Windows,因此不符合UNIX的约定。此外,作为一个封闭的源产品,它不能被修改这样做。

我成功地实现了我的大部分目标,但是Ctrl仍然导致它出错并继续运行,,而我希望它像其他任何REPL一样,导致一个优雅的退出。

我研究了rlwrap选项以及它的filter,寻找一种方法来拦截来自用户的EOF并将其转换为自定义的exit命令(在我的例子中是)off ),但是我找不到一种方法来实现它。

我现在的化名:

代码语言:javascript
复制
alias dyalog='rlwrap -a -H ~/.dyalog_history /opt/mdyalog/17.0/64/unicode/dyalog -b -s'

有关的备选办法是:

  • -s告诉Dyalog以简单的REPL模式启动,而不控制屏幕;
  • -a告诉RLWrap始终保持读行模式,忽略Dyalog逐个字符读取输入字符的尝试。
EN

回答 1

Stack Overflow用户

发布于 2021-01-25 02:31:34

诀窍是从读取中捕获返回代码。考虑到它是如何嵌套的,我发现在主目录中的隐藏文件中这样做是最简单的。

为了全面了解它是如何工作的,我包含了一个更大的代码块,但核心在这一行上,其中包含“read”。

代码语言:javascript
复制
sCommand=""
while [ ! "$sCommand" == "exit" ]
do

    sHistory=~/.promptHistory
    sCommand=$(rlwrap -H $sHistory sh -c 'read -p "> " REPLY && echo $REPLY'; echo $? > ~/.hold)

    if [[ "$(cat ~/.hold)" -eq 1 ]]; then sCommand="exit"; fi

    if [ "$sCommand" == "exit" ]; then return; fi # Bail out if the user asked for exit.

    case $sCommand in

        # All useful commands intercepted here.  Let 'exit' flow through.

    esac

done

神奇之处在于用$获取返回代码?把它放进/.保管好了。从那里开始,剩下的只是代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55965497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档