我使用RLWrap来“驯服”一个非常好的REPL,Dyalog,不幸的是它起源于Windows,因此不符合UNIX的约定。此外,作为一个封闭的源产品,它不能被修改这样做。
我成功地实现了我的大部分目标,但是Ctrl仍然导致它出错并继续运行,,而我希望它像其他任何REPL一样,导致一个优雅的退出。
我研究了rlwrap选项以及它的filter,寻找一种方法来拦截来自用户的EOF并将其转换为自定义的exit命令(在我的例子中是)off ),但是我找不到一种方法来实现它。
我现在的化名:
alias dyalog='rlwrap -a -H ~/.dyalog_history /opt/mdyalog/17.0/64/unicode/dyalog -b -s'有关的备选办法是:
-s告诉Dyalog以简单的REPL模式启动,而不控制屏幕;-a告诉RLWrap始终保持读行模式,忽略Dyalog逐个字符读取输入字符的尝试。发布于 2021-01-25 02:31:34
诀窍是从读取中捕获返回代码。考虑到它是如何嵌套的,我发现在主目录中的隐藏文件中这样做是最简单的。
为了全面了解它是如何工作的,我包含了一个更大的代码块,但核心在这一行上,其中包含“read”。
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神奇之处在于用$获取返回代码?把它放进/.保管好了。从那里开始,剩下的只是代码。
https://stackoverflow.com/questions/55965497
复制相似问题