当前位置:  开发笔记 > 编程语言 > 正文

为什么我不能使用此循环从bash历史记录中删除多个条目

如何解决《为什么我不能使用此循环从bash历史记录中删除多个条目》经验,为你挑选了1个好方法。

这个循环将显示我想要做的但是如果我echo从中删除它,它实际上不会删除任何东西:

history | grep ":[0-5][0-9] ls *$" | cut -c1-5 | 
while read id; do 
    echo history -d $id
done

我添加了缩进以使其更具可读性但我从命令行运行它作为单行.

我已HISTTIMEFORMAT设置,所以grep找到后跟秒后跟ls任意数量的空格.从本质上讲,它在历史中发现的只是一个ls.

这是使用bash 4.3.11Ubuntu 14.04.3 LTS



1> chepner..:

history -d从内存中的历史记录中删除一个条目,并在由管道引起的子shell中运行它.这意味着您要从子shell的历史记录中删除历史记录条目,而不是当前shell的历史记录.

使用流程替换来提供循环:

while read id; do
    history -d "$id"
done < <(history | grep ":[0-5][0-9] ls *$" | cut -c1-5)

或者,如果您的版本bash足够新,请使用该lastpipe选项以确保您的while循环在当前shell中执行.

shopt -s lastpipe
history | grep ":[0-5][0-9] ls *$" | cut -c1-5 | 
while read id; do 
    echo history -d $id
done

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有