Shell 如何以不同的方式自动完成每个参数?
我有一个名为load_pg的函数,它的定义如下:Shell 如何以不同的方式自动完成每个参数?,shell,zsh,Shell,Zsh,我有一个名为load_pg的函数,它的定义如下: load_pg () { pg_restore --verbose --clean --no-acl --no-owner -h localhost -U $1 -d $2 $3 } 我试图用以下代码自动完成每个参数: #compdef load_pg _arguments -s \ "1::_ldpguser" \ "2::_ldpgdb" \ "3::_ldpgfile" _ldpguser () { compad
load_pg () {
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U $1 -d $2 $3
}
我试图用以下代码自动完成每个参数:
#compdef load_pg
_arguments -s \
"1::_ldpguser" \
"2::_ldpgdb" \
"3::_ldpgfile"
_ldpguser () {
compadd $USER
}
_ldpgdb () {
compadd $(cat config/database.yml | grep -i database | awk '{print $2}')
}
_ldpgfile () {
compadd $(ls *.dump*)
}
不幸的是,当我按TAB键时,什么也没有发生。我做错了什么?我试着使用了中的代码,我想说,
$USER
没有定义。在函数中使用几乎空白的~/.zshrc
,TAB什么也不做-如果我定义USER=“foobar”
,TAB将完成:加载\u pg foobar cat:config/database.yml:没有这样的文件或目录
。另外请注意,除非您自动加载\u ldpg{USER,db,file}
,当\u arguments
尝试调用它们时,它们是未知的-我会将这些函数定义放在对\u arguments
的调用之上。如果这还不够,请告诉我,我会采取适当的措施为您找到解决方案。您可以尝试函数-t\u ldpguser
跟踪函数的执行情况。这将有助于您确定哪里出了问题。