我创建了一个简单的脚本,如下所示,名为“/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 bash
、rlwrap
后,$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
默认情况下。这意味着rlwrap
在 sudo
下运行时将能够读取和写入自己的历史记录,即使没有额外的 --history-filename
论证。
Hans(rlwrap
维护者)
关于ubuntu - rlwrap 无法读取/写入自己的历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34125081/