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.sh
en 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 gedit
para cada archivo encontrado.
La -0
opción indica locate
que se devuelva una lista de nombres de archivos separados por nulos. La --null
opción indica xargs
que 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
.