rlwrap无法读/写自己的历史记录

时间:2015-12-07 01:27:46

标签: ubuntu rlwrap

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

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

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

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

然后我做了一个&#34; sudo bash&#34;而作为root,我运行mytool1,它也可以正常工作。

现在我以常规用户身份回来,运行命令&#34; mytool1&#34;会给出错误,如:

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的情况下,$HOME在我运行sudo bash后没有改变,rlwrap应该使用$USER构建历史文件。

您怎么看?

3 个答案:

答案 0 :(得分:1)

sudo可能配置了安全策略,不会更改环境变量,包括HOME。您可以尝试使用-H选项覆盖此行为。有关详细信息,请参阅man sudo

答案 1 :(得分:1)

找到适合我的解决方案:下载rlwrap source并更改为src文件“main.c”,然后在第604行添加

history_filename = malloc(100);
sprintf(history_filename, "/home/%s/.%s_history",getenv("USER"),  command_name);

现在rlwrap将为不同的用户使用不同的历史文件。

答案 2 :(得分:1)

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

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

我很惊讶Ubuntu的sudo默认保留$HOME,我不明白为什么这会有用(在{0}} Ubuntu列表中有here反对此政策,但肯定没有抗议风暴)

与此同时,我会保持rlwrap的行为,但occasional murmurings是否以及其他程序是否以及如何避免此类问题(try to find out

汉斯(rlwrap维护者)