【发布时间】:2017-02-27 23:27:10
【问题描述】:
我的 bash 脚本简化了生成一些长终端命令,例如
git diff "file.one" "file.two" "file.million"
之后,我希望这个构建的命令不要从脚本内部运行,而是将其设置为终端输入,因此用户可以按“Enter”并运行它。我将实现以下目标:
- 用户可以在运行前编辑命令
- 命令将载入历史记录
有可能吗?
【问题讨论】:
我的 bash 脚本简化了生成一些长终端命令,例如
git diff "file.one" "file.two" "file.million"
之后,我希望这个构建的命令不要从脚本内部运行,而是将其设置为终端输入,因此用户可以按“Enter”并运行它。我将实现以下目标:
有可能吗?
【问题讨论】:
做类似事情的一种方法是将项目推送到历史记录中:
history -s '存储命令'之后,用户必须按 ↑ 才能返回命令并编辑/执行它。
注意:如果您这样做,脚本必须是来源而不是执行,即用户必须改为运行. /path/to/script.sh只是/path/to/script.sh。
要让用户在脚本中执行命令之前对其进行编辑,您可以这样做:
command='git diff "file.one" …'
read -e -i "$command" command
eval "$command"
-e 选项使用 readline 以便文件名完成工作,-i 选项使用提供的文本预填充输入字段。
您可以选择在之后执行history -s "$command"(同样,脚本必须是sourced 才能工作)。
【讨论】: