从bash脚本馈送命令行
有没有一种方法可以创建一个bash脚本,在运行时向命令行提供一些文本(要执行的命令),并将光标放在末尾 所以它不应该执行命令,只有当我按[Enter]键时才会发生。我只是希望能够有时更改命令中的一些参数 例如:从bash脚本馈送命令行,bash,Bash,有没有一种方法可以创建一个bash脚本,在运行时向命令行提供一些文本(要执行的命令),并将光标放在末尾 所以它不应该执行命令,只有当我按[Enter]键时才会发生。我只是希望能够有时更改命令中的一些参数 例如: # ./do_command.sh # some__very_long_command_with_plenty_of_params param1 param2 param3 | <- and the cursor is here waiting for me to
# ./do_command.sh
# some__very_long_command_with_plenty_of_params param1 param2 param3 | <- and the cursor
is here waiting for me to just approve hitting the [Enter] or possibly tweak the params before doing so
。/do_command.sh
#一些非常长的命令包含大量的参数param1 param2 param3 |不确定仅使用Bash就可以实现这一点。可能需要终端应用程序中的一些附加功能
我能想到的选择是:
- 为每个包含大量参数的超长命令编写一个带有可选参数的Bash函数。该功能还可以打印命令并请求确认李>
例如:
myfunc() {
param1=${1:default1}
param2=${1:default2}
cmd="command --param $para1 --param $param2"
echo running $cmd
read -p "<ENTER> to run, <CTRL-C> to abort"
$cmd
}
$ aliase myfunc="command --param 1 --param 2"
$ myfunc <CTRL-ALT-E>
$ command --param 1 --param 2
然后键入CTRL-R my
检索命令。do\u命令
实际上只是读取
命令的包装
cmd="some__very_long_command_with_plenty_of_params"
args=("foo bar" "param2" "param3")
read -e -i "$(printf '%q' "$cmd"; printf ' %q' "${args[@]}")" cmd
eval "$cmd"
通常不应使用eval
,但在这里,您特别尝试执行任意命令,这就是eval
的设计目的。这并不比在bash
提示符下直接键入命令更危险
-e
命令告诉read
使用Readline库编辑命令行(就像常规提示一样)<代码>-e
提供默认值。printf
命令确保以可与eval
命令重用的方式打印命令名和默认参数。请注意,%q
不使用引号;它使用反斜杠仅转义必须转义的字符,因此参数foo bar
显示为foo\bar
,而不是“foo bar”
或“foo bar”
为什么不改为修改/do\u command.sh
,这样您就不需要修改/调整参数了?这样你就可以把long命令放到脚本中,让它自动执行,因为我需要经常运行这个命令,有些参数有时会稍微改变。我希望能够检查(并可能更改)默认参数,如果没有问题,只需批准(按[Enter])。谢谢,alias,然后ctrl+alt+e正是我想要的。它使我将命令从专用脚本移动到.bashrc,但这在我的情况下更好。
(reverse-i-search)`my': command --param 1 --param 2 # myfunc
cmd="some__very_long_command_with_plenty_of_params"
args=("foo bar" "param2" "param3")
read -e -i "$(printf '%q' "$cmd"; printf ' %q' "${args[@]}")" cmd
eval "$cmd"