Как написать собственное средство завершения имени файла для определенных каталогов в zsh?

La mayoría de las distribuciones se enviarán con las herramientas locatede findutils en un paquete junto con un script invocado desde crontab que se ejecutará updatedb como usuario none. Solo tiene que encontrar este script (, por ejemplo, :en Debian 9, está en/etc/cron.daily/locate)y adaptarlo para eliminar el manejo del usuario y cambiar el archivo de la base de datos. Entonces, al final, una forma básica podría reducirse a:

updatedb --output="$HOME/locatedb" --localpaths="$HOME"

Esto probablemente debería colocarse en un crontab.

Y el uso sería entonces:

locate --database="$HOME/locatedb" somefilepattern

tendrá que agregar más opciones si está utilizando montajes de red y desea indexarlos, etc.

Si tiene acceso root en su sistema y considera posibles problemas de seguridad/privacidad, puede simplificar su vida y usar las herramientas alternativasmlocateprobablemente disponibles también en la mayoría de las distribuciones, que se comportan exactamente como las herramientas de localización, excepto que indexe todo como raíz (, por lo que nunca fallará en indexar los directorios ilegibles del mundo )en una base de datos a la que el usuario no puede acceder directamente, pero use un comando de localización setuid / setgid que lo leerá y permitirá mostrar los resultados a un determinado usuario solo si este usuario pudo acceder a los resultados en primer lugar.

3
14.01.2016, 01:48
1 ответ

Невозможно указать это, но вы можете исправить_path_filesфункцию завершения для достижения этого:

# Load the `functions` table.
zmodload -Fa zsh/parameter p:functions

# Load the definition of _path_files.
autoload +X -Uz _path_files

# Make a copy of it.
functions[_original_path_files]=$functions[_path_files]

# Replace the original.
_path_files() {
  # `$words[CURRENT]` is the current word under completion.
  # `:a` turns it into an absolute path.
  if [[ $words[CURRENT]:a == <pattern that matches the dirs in question>/* ]]; then
    <your special completion function> "$@"
  else
    _original_path_files "$@"
  fi
}

Документация:

1
26.12.2020, 19:08

Теги

Похожие вопросы