Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.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
转义与curl一起使用的bash命令--data urlencode_Bash_Curl - Fatal编程技术网

转义与curl一起使用的bash命令--data urlencode

转义与curl一起使用的bash命令--data urlencode,bash,curl,Bash,Curl,我试图编写一个bash函数或别名,将shell命令传递给远程API $ explain ls -lh * 具体来说,这就是我到目前为止在.bashrc中所做的: explain () { cmd=$(printf "%q " "$@") curl -Gs "https://www.mankier.com/api/explain/?format=text&cols="$(tput cols) --data-urlencode "q=$cmd" } export -f explai

我试图编写一个bash函数或别名,将shell命令传递给远程API

$ explain ls -lh *
具体来说,这就是我到目前为止在.bashrc中所做的:

explain () {
  cmd=$(printf "%q " "$@")
  curl -Gs "https://www.mankier.com/api/explain/?format=text&cols="$(tput cols) --data-urlencode "q=$cmd"
}
export -f explain
我可以将其与以下内容结合使用:

$ explain ls -lh
但是我还没有找到一种通过参数扩展来处理命令的方法。举几个例子:

$ explain ls -lh $HOME
$HOME已更改为/HOME/j,但我想将字符串ls-lh$HOME传递给远程API

$ explain ls -lh *
*已更改为目录内容,但我想将字符串ls-lh*传递给远程API

$ explain ls -lh *

这是否可以在不转义我要解释的命令的情况下实现?例如,explain函数内的更改,而不是:explain“ls-lh*”

双引号插入shell变量,正如您在这里看到的,$HOME被其值替换。使用单引号防止插值,请解释“ls-lh*”。

好消息,谢谢。但我真的在寻找一种不引用的方法来实现这一点,因此我可以运行explain!!解释最后一个命令。我将修正这一问题,使之明确。顺便说一下,我意识到这可能是不可能的,我准备接受“否”作为答案。好消息:您可以查看我的“无文件扩展和无括号”命令的访问方法。坏消息:你不想这么做,非常感谢@BeniBela-你能将这个问题标记为你链接的问题的副本吗?我没有足够的声誉。这些要求实际上是一样的。看来我可以投票赞成以前从未做过的事