Como passar vários arquivos DB para localizar?

1

Eu quero passar vários arquivos DB para o comando locate , assim:

locate -d ~/.a_locate.db:~/.b_locate.db: -Ai file_to_find

Mas isso me dá esse erro:

locate: can not stat () '~/.b_locate.db': No such file or directory

A página man do locate diz:

-d, --database DBPATH Replace the default database with DBPATH.

DBPATH is a :-separated list of database file names. If more than one --database option is specified, the resulting path is a concatenation of the separate paths.

Eu não entendo claramente o que significa 'concatenação de separado', o que estou fazendo errado? Eu tentei dar o caminho completo ( /home/user/.b_locate.db ) e funcionou. Alguém pode explicar esse comportamento?

(Estou usando o mlocate package no Arch linux)

    
por aksh1618 29.03.2018 / 21:53

1 resposta

2

O segundo ~ não está sendo expandido; tente

locate -d "${HOME}/.a_locate.db:${HOME}/.b_locate.db:" -Ai file_to_find

em vez disso, ou, como isso é zsh, apenas

locate -d $HOME/.a_locate.db:$HOME/.b_locate.db: -Ai file_to_find

O motivo é que ~/ é expandido apenas no início de uma palavra shell. Uma palavra shell termina apenas no espaço em branco (na medida em que é importante aqui - as regras reais são muito mais complicadas). ~/foo:~/bar é uma única palavra, que começa com ~/ , então o ~ inicial é expandido para o seu diretório pessoal, mas o ~ médio não é nada especial, então fica um til. Há uma exceção no lado direito de uma atribuição: em PATH=~/foo:~/bar , ~/ é expandido após o sinal = de atribuição e depois de : no lado direito.

    
por 29.03.2018 / 22:11