从历史记录中获取最后执行的命令作为字符串并将其存储在 bash 的变量中

从历史记录中获取最后执行的命令作为字符串并将其存储在 bash 的变量中

我试图获取最后执行的命令和选项,并将其存储为要写入文件的字符串。我尝试过使用fc,但这只能给我下一个命令(无论如何对我来说),我也尝试过!!:p在我键入它时给出正确的命令,但我似乎无法让它在函数中工作本身。我能完成这个任务吗?

这是发生的事情。arg就是我想要的字符串。

#!/bin/bash                                                                     

foo(){
    read HISTNUMVAR < histnum.txt
    TEMPHNV=$(fc -l 0 | grep -o '^[0-9]*');
    if [ $TEMPHNV -ne $HISTNUMVAR ]; then
        arg=$(***last history command here***);
        ./write_arg_to_file.sh $arg;
    fi
    echo $TEMPHNV > histnum.txt;
}

除了获取正确的历史命令之外,该脚本还执行我需要它执行的所有其他操作。

答案1

可能有一种更干净的方法,但是您可以使用以下命令从历史记录中获取上一个命令

prev=$(fc -ln | tail -2 | head -1)

答案2

我已经设法让一些东西发挥作用。从命令行,使用:

history 2 | sed 's/^ *[^ ]* *//' | cut -d$'\n' -f1

从脚本内部使用:

arg=$(history 1 | sed 's/^ *[^ ]* *//')

这成功地将命令和任何选项保存为字符串。

答案3

您可能需要在脚本中启用历史扩展,因为默认情况下它对于非交互式使用是禁用的。set -H应该可以解决问题。

未经测试,但我猜这arg="!!"会成功。

相关内容