我正在为命令编写完成脚本,但我陷入了困境。我找到的文档和各种网站不符合我的需要。主要命令是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'
即使在输入标志后,脚本也会保持制表符完成
答案1
完成命令的标志-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
,应该可以解决重复项的问题。通过以这种方式使用引号,它指定了一个长命令而不是单独的命令。