我正在尝试编写一个将shell命令传递给远程API的bash函数或别名。
具体来说,这就是我目前在.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 *'
答案 0 :(得分:0)
双引号插入shell变量,正如您在此处看到的那样,$ HOME被其值替换。使用单引号来阻止插值,explain 'ls -lh *'
。