Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash脚本馈送命令行_Bash - Fatal编程技术网

从bash脚本馈送命令行

从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

有没有一种方法可以创建一个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 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"