Passando a saída de locate como um argumento para um editor

2

O que quero dizer é fazer isso em um 1-liner:

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

Eu não consigo descobrir a tubulação certa para fazer isso

    
por Nitay 28.10.2014 / 21:52

1 resposta

6

Soluções simples, mas limitadas

Se houver apenas um arquivo chamado filename.sh em seu sistema, isso provavelmente funcionará

gedit "$(locate filename.sh)"

Ou, como Hennes aponta, se o nome do arquivo estiver no seu PATH:

gedit "$(which filename.sh)"

Há outro problema com os dois: as faixas de shell arrastando novas linhas da substituição de comandos, $(...) . Portanto, no caso patológico em que seu nome de arquivo termina com novas linhas, isso falhará.

Solução geral

Para evitar esses problemas, tente:

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

Isso abrirá uma guia em gedit para cada arquivo encontrado.

A opção -0 informa locate para retornar uma lista separada por núm de nomes de arquivos. A opção --null informa xargs para interpretar sua entrada como uma lista separada por nulo. 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 ~/.bashrc .

    
por 28.10.2014 / 21:58