我正在为一个命令编写一个完成脚本,而且我被困住了。我发现的文档和各种网站不适合我需要的东西。主命令是pacstall,它有标志:-I -S -R -C -U -V -L -Up -Qd -Qi。对于大多数标志,我需要完成作为命令的输出(如果我运行pacstall -I,那么选项卡,它将显示命令curl -s $(cat /usr/share/pacstall/repo/pacstallrepo.txt)/packagelist的输出。到目前为止,这就是我所拥有的:
set -l pacstall_commands "-I -S -R -C -U -V -L -Up -Qd -Qi"
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -I -d 'Install package'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -S -d 'Search for package'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -R -d 'Remove package'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -C -d 'Change repository'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -U -d 'Update pacstall scripts'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -V -d 'Print pacstall version'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -L -d 'List packages installed'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -Up -d 'Upgrade packages'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -Qd -d 'Query the dependencies of a package'
complete -f --command pacstall -n "not __fish_seen_subcommand_from $pacstall_commands" -a -Qi -d 'Get package info'此外,即使在输入标志之后,脚本仍会继续完成选项卡。
发布于 2021-05-22 11:48:11
完整命令的-n标志允许您指定完成发生的条件。在这种情况下,您可以使用__fish_seen_subcommand_from函数来指定是否已经看到了子命令-I。
之后,可以使用-a标志指定要在()中运行的命令。
complete -f --command pacstall -n "__fish_seen_subcommand_from -I" -a "(curl -s (cat /usr/share/pacstall/repo/pacstallrepo.txt)/packagelist)"请注意,在fish中,您在捕获命令结果时不使用$符号,这是您在问题中发布的。
至于你的最后一点。如果从set中删除引号,就会解决重复引用的问题。通过以这种方式使用引号,它指定了一个长命令,而不是单独的命令。
https://unix.stackexchange.com/questions/650811
复制相似问题