Pasar el resultado de localizar como argumento a un editor

Pasar el resultado de localizar como argumento a un editor

Lo que quiero decir es hacer esto en una sola línea:

ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh

Parece que no puedo encontrar la tubería correcta para hacerlo.

Respuesta1

Soluciones simples pero limitadas

Si solo hay un archivo con nombre filename.shen su sistema, esto probablemente funcionará

gedit "$(locate filename.sh)"

O, como señala Hennes, si el nombre del archivo está en su RUTA:

gedit "$(which filename.sh)"

Hay otro problema con ambos: el shell elimina las nuevas líneas finales de la sustitución de comandos $(...). Entonces, en el caso patológico de que el nombre de su archivo termine con nuevas líneas, esto fallará.

solución general

Para evitar esos problemas, intente:

locate -0 "filename.sh" | xargs --null gedit

Esto abrirá una pestaña geditpara cada archivo encontrado.

La -0opción indica locateque se devuelva una lista de nombres de archivos separados por nulos. La --nullopción indica xargsque se interprete su entrada como una lista separada por nulos. En consecuencia, esto funcionará con nombres de archivos con nuevas líneas u otros caracteres difíciles.

Para mayor comodidad, puede crear la función de shell:

lge() { locate -0 "$@" | xargs --null gedit; }

Y úsalo como:lge filename.sh

Para que la definición de función sea permanente, colóquela en su archivo ~/.bashrc.

información relacionada