Usando um padrão glob como um argumento para "which"

3

É possível usar o comando which em um padrão glob para retornar vários resultados?

Por exemplo, eu quero saber o caminho completo de todos os meus comandos latex . Posso tentar:

[lucas@lucas-ThinkPad-W520]/home/lucas$ which latex
/usr/bin/latex

ou:

[lucas@lucas-ThinkPad-W520]/home/lucas$ which pdflatex 
/usr/bin/pdflatex

ou:

[lucas@lucas-ThinkPad-W520]/home/lucas$ which xelatex 
/usr/bin/xelatex

mas não posso usar:

[lucas@lucas-ThinkPad-W520]/home/lucas$ which *latex

que não retorna nada.

Alguma sugestão sobre como usar um padrão glob com o comando which ?

    
por modulitos 02.06.2014 / 12:19

2 respostas

4

Com zsh (observe que which é criado apenas em tcsh ou zsh , em outros shells pode gerar resultados aleatórios, use type em Bourne como shells):

$ which -m '*latex'
/usr/bin/arlatex
/usr/bin/dvilualatex
/usr/bin/fig4latex
/usr/bin/latex
/usr/bin/lualatex
/usr/bin/pdflatex
/usr/bin/pod2latex
/usr/bin/pslatex

Ou (se você quiser considerar somente executáveis e não funções, aliases ...):

$ ls -ld $^path/*latex(-*DN)
lrwxrwxrwx 1 root root    53 Apr  8 03:14 /usr/bin/arlatex -> ../share/texlive/texmf-dist/scripts/bundledoc/arlatex*
lrwxrwxrwx 1 root root     6 Apr  8 03:51 /usr/bin/dvilualatex -> luatex*
lrwxrwxrwx 1 root root    55 Apr  8 03:51 /usr/bin/fig4latex -> ../share/texlive/texmf-dist/scripts/fig4latex/fig4latex*
lrwxrwxrwx 1 root root     6 Apr  8 03:51 /usr/bin/latex -> pdftex*
lrwxrwxrwx 1 root root     6 Apr  8 03:51 /usr/bin/lualatex -> luatex*
lrwxrwxrwx 1 root root     6 Apr  8 03:51 /usr/bin/pdflatex -> pdftex*
-rwxr-xr-x 1 root root 10340 May 20  2013 /usr/bin/pod2latex*
lrwxrwxrwx 1 root root    54 Apr  8 03:14 /usr/bin/pslatex -> ../share/texlive/texmf-dist/scripts/texlive/pslatex.sh*

Com outros shells parecidos com Bourne, você poderia fazer:

searchPATH() (
  pattern=$1
  IFS=:; set -f; set -- $PATH
  set +f; IFS=
  for i do
    for j in "$i"/$pattern; do
      [ -x "$j" ] && printf '%s\n' "$j"
    done
  done
)

E então:

$ searchPATH '*latex'
/usr/bin/arlatex
/usr/bin/dvilualatex
/usr/bin/fig4latex
/usr/bin/latex
/usr/bin/lualatex
/usr/bin/pdflatex
/usr/bin/pod2latex
/usr/bin/pslatex

Isso deve trabalhar mais os valores mais comuns de $PATH . Ele omitirá as entradas no diretório atual se $PATH terminar em : (como /bin:/usr/bin: )

    
por 02.06.2014 / 12:36
0

Com Bash , usando o compgen e o type builtins , assumindo que não há caracteres de nova linha nos nomes dos comandos:

IFS=$'\n'; set -f; type -p -- $(compgen -c | grep 'latex$')
    
por 02.06.2014 / 13:10