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
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の後ろに展開されます~/
。=
: