Bash脚本如何实现预展示命令供用户编辑后回车执行
Bash 实现预置可编辑命令的方案
核心用Bash内置read命令的行编辑能力实现,不需要额外依赖:
-e参数:启用和日常命令行一致的Readline编辑模式,支持光标移动、文本删改、常规快捷键操作-i <初始文本>参数:指定输入行预填充的内容,用户运行脚本就能直接看到预置命令,可直接在原有内容基础上修改。
完整脚本实现(create_commit.sh)
#!/bin/bash # 预填充git commit命令,用户编辑后回车执行 read -e -i "git commit -m 'edit this message'" -p "" user_cmd if [[ -n "$user_cmd" ]]; then eval "$user_cmd" fi
使用方法
- 给脚本添加可执行权限:
chmod +x create_commit.sh - 运行脚本:
./create_commit.sh - 运行后终端会直接显示预置的
git commit -m 'edit this message',直接移动光标到单引号内修改提交信息,改完按回车就会自动执行提交;如果不想执行,按Ctrl+C中断,或者把整行内容清空再按回车即可。
简化为命令别名的写法
如果不想单独存脚本,可以直接在~/.bashrc(Zsh用户改~/.zshrc)里加别名,随时敲命令就能唤起:
alias gcommit='read -e -i "git commit -m '\''edit this message'\''" user_cmd && eval "$user_cmd"'
加完执行source ~/.bashrc生效,之后敲gcommit就能直接调出预置的提交命令编辑。
注意事项
- 该方案依赖GNU Bash 4.0及以上版本的
read内置命令,主流Linux发行版、macOS通过Homebrew安装的新版Bash都可正常使用,极简环境的低版本shell/非Bash shell可能不支持-i参数。 - 脚本里用
eval执行用户编辑后的命令,支持管道、重定向等复杂shell语法,和直接在终端敲命令的行为完全一致。
内容的提问来源于stack exchange,提问作者Lincoln D
相关产品推荐
相关产品推荐

