问题标签 [rlwrap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oracle-golden-gate - 安装 rlwrap 时出错
我正在尝试为 Oracle Goldengate 安装安装 rlwrap,但在安装时出现以下错误。
yum install rlwrap-0.37-1.el6.i686.rpm 加载的插件:fastestmirror,langpacks 无法打开:rlwrap-0.37-1.el6.i686.rpm。跳过。错误:无事可做
任何帮助将不胜感激!
谢谢!
clojure - 使用 clojure.main/repl 时如何获得类似 readline/rlwrap 的功能?
repl
当我使用来自的函数clojure.main
时,如何从我的 REPL 中获得类似 readline(或类似 rlwrap)的功能?
这样做的背景是我正在使用和自定义Clojure 的乐趣,第一版中的break
函数。我在lein repl
REPL 内部使用它。当我的“断点”启动时,Leiningen 的 REPL 的类似 readline 的功能就消失了,这有点不方便。我的肌肉记忆让我↑很快就被击中了Enter。在我能阻止自己之前,我的终端里有这个:
现在我的 REPL 卡住了,我必须终止终端或进程才能退出。如果我可以让 readline 在这个二级 REPL 中工作,或者至少防止这个常见问题使我的调试会话脱轨,我非常希望。
c - 根据 access() 目录不可写,用户仍然可以在其中创建文件
我收到了一个
让我摸不着头脑的错误报告。readline
在我的程序中,我在收集历史记录并在程序退出时将其写入该目录中的文件之前测试目录(默认情况下是用户的主目录)的可写性。
这是有问题的代码:
(当然,这是伪 C。真正的代码在这里)
用户(我们叫她USER
)报告收到错误消息“无法在 /home/USER 中创建 xxx:权限被拒绝”,在手动创建文件后消失USER@host > touch /home/USER/xxx
。
我希望一个不可写的主目录会导致各种问题,但用户甚至可以只是touch
该目录中的一个文件。
该程序不运行 suid,USER 拥有她的主目录(并且显然可以在其中创建文件)。我的程序显然是唯一显示此类问题的程序。它已被广泛使用多年,这是第一次报告此错误
Linux手册页access (2)
说
如果发现一个目录是可写的,那可能意味着该目录下可以创建文件
为什么可能?为什么(以及何时)并非总是如此(除了竞争条件,例如有人在access()
调用后更改权限、完整的 inode 表或达到用户限制)所有这些似乎都不是问题 - 特别是因为access()
调用失败,并且touch xxx
成功。
sh - rlwrap 命令替换中的 Ctrl-C 停止回显
我在脚本中使用这样的东西:
实际上有更多选择,但这足以重现问题。它非常适合我的目的......只要我不按 Ctrl-C 退出。如果我这样做了,输入 echo 会在终端上停止,我发现恢复它的唯一方法是盲目输入reset
.
-I
国旗没有帮助。我也试过这个:
但是当我按下 Enter 时,没有设置 REPLY。我在 bash 和 dash 中都试过了,结果相同编辑:抱歉,由于 shebang 上的拼写错误,dash 没有被执行。它在破折号中正常工作。
如何将变量设置为输出rlwrap
并能够在不丢失输入回显的情况下中断?也出于好奇,有人知道这里发生了什么吗?
exit - 在 RLWrap 中处理 EOF
我正在使用 RLWrap 来“驯服”一个非常好的 REPL,即 Dyalog APL,不幸的是,它起源于 Windows 领域,因此不符合 UNIX 约定。此外,作为一个封闭源代码的产品,它不能被修改为这样做。
我设法实现了我的大部分目标,但是Ctrl-D 仍然会导致它发出错误并继续运行,而我希望它能够像任何其他 REPL 一样优雅地退出。
我查看了 rlwrap 选项以及它的过滤器 API,以获取一种拦截来自用户的 EOF 并将其转换为自定义退出命令的方法,这就是)off
我的情况,但我找不到这样做的方法.
我目前的别名:
相关选项是:
-s
告诉 Dyalog 以简单的 REPL 模式启动,而不控制屏幕;-a
告诉 RLWrap 始终保持在 readline 模式,忽略 Dyalog 逐个字符读取输入的尝试。
python - 是否有一个 python (3) 本机等效于使用 rlwrap 调用脚本?
我input()
用来向用户询问 Python (3) CLI 脚本中的命令。
我希望他们能够按下↑</kbd> to reuse older commands. For that matter I'd like them to be able to do other basic line editing too.
我可以通过运行来获得这些功能,rlwrap myscript.py
但我宁愿不必运行包装脚本。(是的,我可以设置一个别名,但如果可以的话,我想将它封装在脚本中)
是否有一个库可以启用此功能(例如,提供历史/编辑意识版本input()
)还是我需要从头开始?
scheme - MIT Scheme 的 REPL 中是否有快速退出调试器的方法?
假设我尝试在 MIT Scheme 的 REPL 中使用未定义的变量:
这会自动将我带入调试器。要退出调试器,我必须输入(restart 1)
. 是否有不涉及仅输入 11 个字符以退出调试器的替代方法?这三个选项都涉及输入 11 个字符,这有点愚蠢。
c - 读取(fd,buf,N>0)== 0,但 fd 不在 EOF 处?
以下小 C 程序(我们称之为pointless
):
将打印“仍然存在!” 正如预期的那样,经过一小段延迟。但是,
rlwrap ./pointless
在 AIX 下不打印任何内容并立即退出。
显然,rlwrap
在第一个字节之后读取 0 个字节,write()
并且(错误地)决定pointless
已将其退出。
在没有 的情况下运行pointless
时rlwrap
,在 rlwrap
所有其他系统(Linux、OSX、FreeBSD)上运行时,“仍然存在!” 按预期打印。
相关的rlwrap
(伪)代码是这样的:
显然,在除 AIX 之外的所有系统上,write
在 pty 的从属端 ing 0 字节是无操作的,而在 AIX 上它唤醒
select()
主端的。写入 0 字节似乎毫无意义,但我的一个测试程序写入随机长度的文本块,实际上可能恰好有长度 0。
在 linux 上,man 2 read
状态“成功时,返回读取的字节数(零表示文件结束) ”(斜体是我的)这个问题之前已经出现过,
没有提到这种情况。
这就引出了一个问题:我怎样才能便携地确定从端是否已经关闭?(在这种情况下,我可能只是等待SIGCHLD
然后关闭商店,但这可能会打开另一罐我宁愿避免的蠕虫)
编辑:POSIX状态:
将长度为零的缓冲区(nbyte 为 0)写入 STREAMS 设备会发送 0 个字节并返回 0。但是,将长度为零的缓冲区写入基于 STREAMS 的管道或 FIFO 不会发送任何消息并返回 0。该进程可以发出 I_SWROPT ioctl() 以使零长度消息能够通过管道或 FIFO 发送。
在 AIX 上,pty
它确实是一个 STREAMS 设备,而且,不是管道或 FIFO。ioctl(STDOUT_FILENO, I_SWROPT, 0)
似乎可以使 pty 符合 Unix 世界的其他部分。可悲的是,这必须从从属端调用,因此在rlwrap
影响范围之外(即使我们可以调用ioctl()
中间fork()
和exec()
- 这并不能保证执行的命令不会将其改回)
rlwrap - 如何停止 rlwrap --remember 在完成列表中包含版本和版权信息?
假设我像这样使用 rlwrap: rlwrap --remember sml
。这将启动新泽西标准机器学习:
如果我Jer
在提示符下输入并按Tab,rlwrap 将完成它到Jersey
. 我只想完成我输入的代码,而不是包含版本信息(和/或版权信息)的行。有没有办法在使用时从 rlwrap 的完成中排除这些行--remember
?
signals - 当我按下 Ctrl-z 时如何阻止 rlwrap 暂停程序
我rlwrap
用作一个程序的包装器,该程序具有 SIGTSTP 的自定义处理程序(即,当不使用rlwrap
时,当用户按下时它不会挂起Ctrlz)。当我使用我的程序时rlwrap
,Ctrlz错误地挂起程序。如何防止这种行为?rlwrap
不应暂停程序,因为程序在收到 SIGTSTP 信号时具有自定义行为。