複数のDBファイルを渡して検索するには?

複数のDBファイルを渡して検索するには?

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)を提供しようとしましたが、うまくいきました。誰かがこの動作を説明できますか?

(私はmlocateArch Linuxでパッケージを使用しています)

答え1

2番目は~拡張されていません。

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

その理由は、~/シェル語の先頭でのみ拡張されるからです。シェルの単語は空白で終わります(この場合、実際のルールははるかに複雑です)。~/foo:~/barはで始まる単語なので、先頭は~/ホーム~ディレクトリに展開されますが、~途中に特別なものがないため、まだチルダです。割り当ての右側には 1 つの例外があります。 inは、割り当てPATH=~/foo:~/bar記号の後ろと右側のaの後ろに展開されます~/=:

関連情報