gpt4 book ai didi

docker - 动态应用完成选项

转载 作者:行者123 更新时间:2023-12-02 18:47:56 24 4
gpt4 key购买 nike

我有一个 fish shell像这样完成 docker :

# 'docker-subcommands.txt' is an exhaustive list derived from the "Usage" message.
set -l subcoms (cat /etc/fish/completions/docker-subcommands.txt)

# Found '__fish_seen_subcommand_from' in the completion for `systemctl`
# (in /usr/share/fish/completions/...).
complete -f -c docker -n "not __fish_seen_subcommand_from $subcoms" -a "$subcoms"

function _docker_container_action
# The placeholder is needed here because fish will choke on an empty completion list.
echo (docker ps -aq) '{z-placeholder}'
end

function _docker_image_action
echo (docker images -q) '{z-placeholder}'
end

for sc in cp exec inspect restart rm start stop
complete -c docker -n "contains $sc (commandline -poc)" -x -a (_docker_container_action)
end

for sc in rmi run
complete -c docker -n "contains $sc (commandline -poc)" -x -a (_docker_image_action)
end

问题是图像和容器 ID 的完成需要是动态的(如文件完成),而上面似乎运行 -a当完成文件被(重新)获取时的命令。

当实际应用完成时,如何刷新选项?

我应该提到我已经尝试引用 -a命令,这似乎是常见的做法。但是,我得到的不是每个 ID 的选项,而是一个完成选项,一个带有空格的长字符串( \ )包含 ID 和 \{z-placeholder}在末尾。 :(

[...] 引用 -a只要它的输出不是由 echo 产生的,命令就可以工作。 (将其字符串化)。结果是 -a的“窒息”问题是没有参数,如果你输入 docker ps -aq 会发生这种情况直接在那里,并且没有要列出的容器 ID。所以这种模式有效:
function _docker_container_action
docker ps -aq
end

complete -c docker -n "contains $sc (commandline -poc)" -x -a "(_docker_container_action)"

也不需要我的占位符。

最佳答案

whereas the above seems to run the -a command when the completion file is (re-sourced).



那是因为您已经将它作为命令替换包含在此处,所以当文件为 source 时d,它扩展,完成系统不知道它之前是什么。

但是 -a选项知道在完成时扩展它的参数,所以你需要做的就是引用它:
complete -c docker -n "contains $sc (commandline -poc)" -x -a "(_docker_container_action)"

关于docker - 动态应用完成选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56210560/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com