自定义Bash重复命令函数执行失败,提示command not found
解决Bash函数中执行历史命令的问题
你的问题出在Bash历史扩展的执行时机:!-x这种历史扩展语法是在命令行输入的早期解析阶段处理的,而函数中变量替换($i)是在之后才发生的,所以"!-$i"会被当成普通字符串,Bash会把它当作命令去查找,自然报"command not found"。
改用fc命令就能解决这个问题,fc是Bash专门用来操作历史命令的工具,适合在脚本/函数中使用。修改后的函数如下:
rep() { # 检查参数是否为正整数 if ! [[ $1 =~ ^[1-9][0-9]*$ ]]; then echo "请传入一个正整数参数" return 1 fi for i in $(seq 1 "$1"); do fc -s -"$i" done }
关键说明:
fc -s -$i:-s表示重新执行指定的历史命令,-$i对应倒数第i条命令,和你想要的!-$i效果完全一致。- 参数检查:避免传入非正整数导致错误,提升函数健壮性。
测试时直接执行rep 3,就能依次重复执行倒数第1、2、3条命令。
内容的提问来源于stack exchange,提问作者karatefuki
相关产品推荐
相关产品推荐

