我想将多个数据库文件传递给locate
命令,如下所示:
locate -d ~/.a_locate.db:~/.b_locate.db: -Ai file_to_find
但这给了我这个错误:
locate: can not stat () `~/.b_locate.db': No such file or directory
定位的手册页说:
-d, --database DBPATH 用 DBPATH 替换默认数据库。
DBPATH 是一个以 : 分隔的数据库文件名列表。如果指定了多个 --database 选项,则生成的路径是单独路径的串联。
我不清楚“分开的串联”是什么意思,我做错了什么?我尝试给出完整路径 ( /home/user/.b_locate.db
) 并且它有效。有人可以解释这种行为吗?
(我mlocate
在 Arch linux 中使用包)
答案1
第二个~
没有被扩展;尝试
locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find
相反,或者,因为这是 zsh,所以
locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find
原因是它~/
仅在 shell 单词的开头进行扩展。 shell 单词仅以空格结尾(就这里而言,实际规则要复杂得多)。~/foo:~/bar
是一个单词,以 开头,~/
因此前导~
扩展到您的主目录,但中间~
没有什么特别的,因此它仍然是波形符。赋值的右侧有一个例外: in PATH=~/foo:~/bar
,在赋值符号之后和右侧的a 之后~/
展开。=
: