ubuntu - rlwrap 无法读取/写入自己的历史记录

标签 ubuntu rlwrap

我创建了一个简单的脚本,如下所示,名为“/usr/bin/mytool1”并使其可执行。

#!/usr/bin/rlwrap /usr/bin/perl

while (1) {
    chomp($cmd = <STDIN>);
    print "cmd=$cmd\n";
}

问题是,如果我以普通用户身份运行它,它就可以正常工作。

然后我执行了“sudo bash”,并以 root 身份运行 mytool1,它也运行良好。

现在我以普通用户身份回来,运行命令“mytool1”将给出如下错误:

rlwrap: cannot read and write /home/user1/.perl_history: Permission denied

我做了一些调查,这是我发现的:

$ ls -l /home/user1/.perl_history
-rw------- 1 root root 138 Dec  6 18:13 /home/user1/.perl_history

这里的问题是,rlwrap 在以 root 身份运行时会将 /home/user1/.perl_history 的所有者更改为 root。

我认为这是 rlwrap 上的一个错误,因为在 Ubuntu 的情况下,在我运行 sudo bashrlwrap 后,$HOME 没有改变> 应该使用 $USER 来构建历史文件。

你觉得怎么样?

最佳答案

无需修改重新编译rlwrap ,只需在命令行指定历史文件即可:

rlwrap --history-filename=$HOME/.${USER}_command_history command

令我惊讶的是 Ubuntu 的 sudo蜜饯$HOME默认情况下,我不明白为什么这会有用(Ubuntu 列表中有 occasional murmurings 反对此政策,但肯定没有抗议 Storm )

同时,我会保留 rlwrap s 的行为原样,但是 try to find out其他程序是否以及如何避免此类问题 ( not all of them do )

编辑(2019 年 8 月):来自 sudo - 1.8.27-1ubuntu2从 Ubuntu 开始(终于!)restores sudo处理$HOME与其他人所做的一样:它不会保留$HOME默认情况下。这意味着rlwrapsudo 下运行时将能够读取和写入自己的历史记录,即使没有额外的 --history-filename论证。

Hans(rlwrap 维护者)

关于ubuntu - rlwrap 无法读取/写入自己的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125081/

相关文章:

ubuntu - RTX 3060 无法使用 cuda 11.4 运行 Pytorch Yolov4

java - 如何在 Linux (Ubuntu) 中使用 COM

sql - 为什么 rlwrap 会因冗余输出而使屏幕变得困惑?

shell - 如何让 rlwrap 在 Emacs 的 shell/eshell 中工作?

apache - 无法使用 docker 自动启动 apache

amazon-web-services - Datadog AWS EBS 监控 - 驱动器空间 - 排除/开发/循环*设备

windows - Windows 上的 Ubuntu 上的 Bash - rlwrap 无法打开 master pty

linux - 在 Linux 上安装 rlwrap - 没有 root 权限

linux - vmware Player 无法在 kubuntu 中启动服务

linux - rlwrap 中的 LD_PRELOAD?