O que significa '//' em retorno de 'which'

4

Eu tenho um script executável test no caminho completo /home/sawa/foo/bar/test . O diretório /home/sawa/foo/bar está dentro de $PATH e tem prioridade sobre os padrões, incluindo /usr/bin . Quando eu faço

'which test'

para ver se este comando é reconhecido corretamente, ele retorna

/home/sawa/foo/bar//test

com a barra dupla // . Eu sei que existe um comando interno com o mesmo nome test , e quando eu removo o meu, este sob /usr/bin/test é retornado por which , então eu acho que está interferindo de alguma forma.

  1. O que essa barra dupla significa aqui e por que ela está aparecendo aqui?
  2. Meu executável test parece não funcionar corretamente. Por que isso?
por sawa 03.05.2011 / 10:50

2 respostas

7

Eu acho que você tem /home/sawa/foo/bar/ em seu caminho - ou seja, um caminho com uma barra final.

which está iterando sobre cada elemento de $PATH e anexando /argv[1] e verificando a existência desse arquivo. Isso causa uma barra dupla - uma da parte $PATH e uma da /argv[1] .

Uma barra dupla não é problema . É recolhido em uma única barra pelo kernel. Somente no começo de um caminho pode uma barra dupla ter um significado especial, e nem sempre então.

Quanto a test não funcionar, verifique se você não está usando o shell integrado ao chamar test . Você normalmente faz isso usando um caminho completo, mas com o bash você também pode usar enable -n test para desabilitar o comando test .

    
por 03.05.2011 / 11:46
3

O mais provável é que não funcione para você porque o shell interno está sendo executado com prioridade sobre qualquer executável. Você não deve intencionalmente criar um conflito de nomes como esse, o comportamento será inconsistente entre os ambientes. O sistema binário test está lá apenas para o uso de shells que não possuem uma versão interna.

Se você deseja funcionalidade alternativa, você deve nomear seu script de outra forma.

    
por 03.05.2011 / 10:56