Teste de link com barra final?

3

Eu criei em /tmp/test/

mkdir somedir
ln -s somedir/ somelink

Eu quero executar o loop somente por diretórios :

for file in */ ; do 
  if [[ -d "$file" && ! -L "$file" ]]; then
    echo "$file is a directory";
  fi;
done

mas por que isso mostra somelink is a directory ?

enquanto sem a barra que faz?

for file in * ; do 
...

E há alguma diferença no zsh?

    
por rubo77 21.10.2013 / 05:51

1 resposta

4

A barra no argumento dado a -L faz com que o link simbólico seja sempre resolvido (ou seja, no nível da chamada lstat (2)). Veja POSIX.1 Definições Base, Conceitos Gerais, Resolução do nome do caminho ou “Barras à direita” na path_resolution (2) do Linux.

Isso não é específico para zsh .

Você pode usar uma simples expansão de parâmetro para remover a barra:

[[ … -L "${file%/}" … ]]

O acima deve funcionar em qualquer shell tipo Bourne ( ksh , ash , traço , bash , zsh , et cetera).

    
por 21.10.2013 / 09:29