fish shell 从命令传递参数

fish shell pass argument from command

我正在尝试将 fish 与 docker machine 和 docker 客户端一起用于 fish shell。我可以 运行 docker-machine config dev 并且它会给我传递给 docker 的参数。但是当我尝试这样做时 docker (docker-machine config dev) ps 它会说 flag provided but not defined: --tls --tlscacert

如果我将 shell 切换为 bash,则 docker $(docker-machine config dev) ps 可以正常工作。那么这里的语法有什么问题?

我尝试用谷歌搜索答案,好像这个错误与 Go 有关,也许吧?

Docker 版本 1.5.0,构建 a8a31ef

fish,版本 2.1.1

编辑: 这是 docker-machine config dev

的输出

--tls --tlscacert=/Users/me/.docker/machine/machines/dev/ca.pem --tlscert=/Users/me/.docker/machine/machines/dev/cert.pem --tlskey=/Users/me/.docker/machine/machines/dev/key.pem -H="tcp://192.168.99.102:2376"

您 运行 进入

简短的回答是 bash 将进一步将命令替换拆分为任何空格上的单独参数,而 fish 仅使用换行符将它们拆分。由于 docker-machine config dev 不输出换行符,所以外部 docker 命令只有一个巨大的参数,内嵌空格。

要模拟 bash 行为,您可以用换行符替换空格:

docker (docker-machine config dev | tr -s ' ' \n) ps

这应该符合您的预期。