我试图获取最后执行的命令和选项,并将其存储为要写入文件的字符串。我尝试过使用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="!!"
会成功。