Exemplos de opções para o bash cd, por exemplo: cd -Pe @ $ directory

4

Em bash 4.4.12 , help cd diz:

Options:
  -L        force symbolic links to be followed: resolve symbolic
            links in DIR after processing instances of '..'
  -P        use the physical directory structure without following
            symbolic links: resolve symbolic links in DIR before
            processing instances of '..'
  -e        if the -P option is supplied, and the current working
            directory cannot be determined successfully, exit with
            a non-zero status
  -@        on systems that support it, present a file with extended
            attributes as a directory containing the file attributes

Estou com dificuldade em enrolar minha cabeça em torno dessas palavras e meu google-fu não traz nada.

  1. Qual é o exemplo de quando cd -P teria preferência sobre cd ?
  2. Como o cd -L é diferente do padrão cd ?
  3. Como é possível que o diretório de trabalho não possa ser determinado com sucesso?
  4. Qual é o exemplo de usar -@ ?
por Tom Hale 07.04.2017 / 15:55

1 resposta

3

O Manual de Bash dá um pouco mais de detalhes.

  1. cd -P garante que você tenha um caminho "real":

    $ cd /tmp
    $ mkdir -p a/b
    $ ln -s a/b b
    $ cd b
    $ pwd
    /tmp/b
    $ cd -P ../b
    $ pwd
    /tmp/a/b
    

    Usar -P significa que o symlink de b to a/b é desreferenciado. A interação com .. é que .. é normalmente processado removendo o componente do caminho anterior, se houver um; não verificando o caminho no disco. Se você usa muitos links simbólicos, isso pode acabar sendo muito confuso.

  2. cd -L é equivalente ao padrão cd .

  3. O diretório de trabalho atual não pode ser determinado se tiver sido excluído:

    $ cd /tmp
    $ mkdir -p c/d
    $ cd c/d
    $ rmdir ../d ../../c
    $ cd ..; echo $?
    cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
    0
    

    v.

    $ cd -Pe ..; echo $?
    cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
    1
    
  4. Não sei ao certo (posso imaginar como seria, mas o Bash apenas diz " cd : -@ : opção inválida"; tenho a impressão de que atualmente só está disponível em Solaris, precisa de O_XATTR ).

por 07.04.2017 / 16:17