![Passando a saída de localizar como argumento para um editor](https://rvso.com/image/1428722/Passando%20a%20sa%C3%ADda%20de%20localizar%20como%20argumento%20para%20um%20editor.png)
O que quero dizer é fazer isso em uma linha:
ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh
Não consigo descobrir a tubulação certa para fazer isso
Responder1
Soluções simples, mas limitadas
Se houver apenas um arquivo nomeado filename.sh
em seu sistema, isso provavelmente funcionará
gedit "$(locate filename.sh)"
Ou, como aponta Hennes, se o nome do arquivo estiver em seu PATH:
gedit "$(which filename.sh)"
Há outro problema com ambos: o shell retira as novas linhas da substituição do comando, $(...)
. Portanto, no caso patológico de o nome do arquivo terminar com novas linhas, isso falhará.
Solução geral
Para evitar esses problemas, tente:
locate -0 "filename.sh" | xargs --null gedit
Isso abrirá uma guia gedit
para cada arquivo encontrado.
A -0
opção informa locate
para retornar uma lista de nomes de arquivos separados por nulos. A --null
opção diz xargs
para interpretar sua entrada como uma lista separada por nulos. Conseqüentemente, isso funcionará com nomes de arquivos com novas linhas ou outros caracteres difíceis.
Por conveniência, você pode criar a função shell:
lge() { locate -0 "$@" | xargs --null gedit; }
E use-o como:lge filename.sh
Para tornar a definição da função permanente, coloque-a no seu arquivo ~/.bashrc
.