我一直在寻找如何做到这一点,似乎它被提到了几次作为一个建议,我还没有找到一个例子。你知道吗
我尝试了以下方法:
mkfifo /tmp/testpipe
mknod /tmp/testpipe p
最后,我更新了~/.bashrc文件以包含以下内容: HISTFILE=/tmp/testpipe
我在网上找到一个脚本,它应该阅读管道:
#!/bin/bash
pipe=/tmp/testpipe
trap "rm -f $pipe" EXIT
if [[ ! -p $pipe ]]; then
mkfifo $pipe
fi
while true
do
if read line <$pipe; then
if [[ "$line" == 'quit' ]]; then
break
fi
echo $line
fi
done
echo "Reader exiting"
我用一个类似的“hello world”运行它,它被写入管道,并且它确实显示了它(因此我知道管道存在,并且可以接收数据)。你知道吗
当我将bashrc设置为上面的值并重新启动我的终端时,我不会得到命令提示,直到我两次点击control C(假设它试图写入指定的管道,但是我没有正在运行的脚本,所以我不能“读取它”,所以我必须终止它)。我继续说,它将保留历史,但那是因为它在内存中,没有被推到文件。你知道吗
我发现这可能有一些有用的信息,但我只是不知道如何使它为我所要做的工作。 https://askubuntu.com/questions/67283/is-it-possible-to-make-writing-to-bash-history-immediate 当我尝试结合命名管道输入其中的一些内容时,我从未得到命令提示。我终于合上shell,把那些行注释掉了。你知道吗
我的最终目标是,我希望能够在发出每个命令时接收它们,并将它们推送到联机数据库或其他什么地方,这样我就可以拥有一些类似于网页浏览历史的东西,但是对于命令。它会告诉我在每个设备上使用了什么命令、日期和时间。你知道吗
我最初的想法是,我可能可以通过一个命名的管道来实现这一点,但我不知道这样做是否可行或合乎逻辑。你知道吗
我希望我可以设置命名的管道,然后启动python或其他东西来读取写入的管道,并将数据推到网上,比如firebase或其他什么。你知道吗
我想我有几个问题。你知道吗
*背景:几个月前,我在我的主pc上安装了wifi usb加密狗的驱动程序,但那台pc现在无法启动(我想是电源问题),我在我的上网本上升级了ubuntu(我运行的是旧版本,不再更新了),正常的wifi无法工作,所以我插上了usb wifi,它工作正常(但很脆弱),我知道要解决这些问题,我必须执行一些其他步骤,但事实上,现在我需要谷歌的东西(我不记得我得到的建议是直接的或不是现在,或者如果我不得不摆弄)。这让我产生了这样一个想法:能够通过设备在一段时间内搜索历史将是一件很好的事情。我考虑过下载BASH源代码并在其中注入一些东西,然后重新编译并使用它,但是我必须为每个设备都这样做,在安装开始时将一些东西扔进PC并完成它会更方便。你知道吗
*根据问题/评论更新 虽然通过PID拆分成不同的hist文件是描述命令历史的一个好方法,但我不确定每次更新时如何将每个命令推送到远程数据库,我几乎必须打开PID命名的文件,抓取内容并推送到远程数据库,然后删除内容,同时希望不会阻塞shopt?从运行到存储发生的下一个命令的命令(假设一次有一堆命令)。你对这是否是个问题有什么建议吗?你知道吗
恐怕没有简单的方法可以像你想的那样截取历史。我刚刚查看了bash源代码,有许多问题使得用管道替换普通历史文件几乎不可能:
1)bash在启动时读取历史记录,但这当然只能在历史记录是普通文件的情况下才起作用(除非您的程序非常聪明,并且将字符作为伪历史记录注入—但请参阅下一点)。这可能就是你的壳挂起来的原因。你知道吗
2)bash限制文件大小,因此它必须使用仅适用于普通文件的服务(例如“truncate”、“lseek”…)。你知道吗
3)bash处理历史的方式取决于它的版本/内部版本。如果一个用于处理某个版本的解决方案停止处理另一个版本,我不会感到惊讶。你知道吗
也许更好的解决方案是监视文件系统事件,以便检测历史文件的更改。不像听管道那么简单,但是如果你感兴趣,你可以看看inotify API。你知道吗
相关问题 更多 >
编程相关推荐