有没有办法创建一个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
到目前为止我所拥有的只是脚本回显命令,需要我复制粘贴它。
答案 0 :(得分:1)
不确定只能使用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
}
使用文本完成工具,例如Dash,TextExpander,当您编写特定的字符序列时会提示您输入参数,并在按 ENTER时写入结果
使用带有在线扩展的Bash别名:使用大量参数为每个很长的命令创建一个别名,然后键入别名,但不要按Enter(还),按 CTRL-ALT -E ;该行将展开,您将能够查看,修改,然后按 ENTER 。
例如:
$ aliase myfunc="command --param 1 --param 2"
$ myfunc <CTRL-ALT-E>
$ command --param 1 --param 2
例如:
$ command --param 1 --param 2 # myfunc
然后输入 CTRL-R my
(reverse-i-search)`my': command --param 1 --param 2 # myfunc
检索命令。
答案 1 :(得分:0)
read
实际上只是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
命令告诉-e
使用Readline库编辑命令行(就像常规提示一样)。 printf
提供默认值。 eval
命令确保以可以使用%q
命令重用的方式打印命令名称和默认参数。请注意foo bar
不使用引号;它使用反斜杠来仅转义必须转义的字符,因此参数foo\ bar
显示为"foo bar"
,而不是'foo bar'
或 **output$sumy** <- renderTable({
input$action
if(is.null(input$action))
return(NULL)
else
isolate({
trees2 <- FindTreesCHM(fchm(), (as.numeric(input$fws)), (as.numeric(input$minht)))
h <- trees2["height"]
TotalArvores <- nrow(trees2)
rbind(summary(h), TotalArvores, make.row.names = "Total number of trees")
})
})
output$downSumy <- downloadHandler(
filename = function() {
paste("Summary of LiDAR metrics", "csv", sep = ".")
},
content = function(file) {
write.table(**input$sumy**, file, sep = ",")
}
)