bash - 如何在history里面获取一条命令,再重新执行?

查看:195
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆