bash - 如何在history里面获取一条命令,再重新执行?
本文介绍了bash - 如何在history里面获取一条命令,再重新执行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
首先我的想法是这样的:
eval $( history | grep "cd" | grep -v "history"| tail -n 1 | awk '{ print $0 }' )
然后这样有一个问题:
这个样子是无法写到alias里面去的。
所以我就想写成bash文件(lcmd):
#!/bin/bash
#这个有什么用呢
#这个的作用找出最后掉用$1 的命令,并重新执行
[ $# -eq 0 ] && { echo "need one argument"; exit 0;}
echo "find:$1"
last_command="$( history | grep "$1" | grep -v "history"| tail -n 1 | awk '{ print $0 }' )"
echo "last_command:${last_command}"
echo $PWD
[ -z "$last_command" ] && { echo "last_command not found "; exit 0; }
/bin/bash -i -c "${last_command}"
echo $PWD
echo "over"
但是这样子还是有问题的:
last_command不管怎么弄都是为空
然后我去想了一个法子:
不是直接hisory:而是grep ~/.bash_history
但是这样还是有一个问题:/bin/bash -i -c "${last_command}"
执行没有结果……我是拿cd
命令测试的,
而且同时发现另外一个问题:grep ~/.bash_history
好像对我在terminal执行的命令没有感觉。
也就是说我在terminal
执行 echo "hello"
,然后lcmd "echo"
打印出来的last_command
不是echo "hello"
请问我现在 的问题该怎么解决啊
解决方案
你这是何苦?直接用!不好吗?
root@docker:~# echo "hello"
hello
root@docker:~# cd /
root@docker:/# !echo
echo "hello"
hello
root@docker:/#
这篇关于bash - 如何在history里面获取一条命令,再重新执行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文