首页 > 如何在history里面获取一条命令,再重新执行?

如何在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:/#

【热门文章】
【热门文章】