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

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

Em bash 4.4.12, help cddiz:

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 tendo dificuldade em entender essas palavras e meu google-fu não consegue trazer nada à tona.

  1. Qual é um exemplo de quando cd -Pseria preferido cd?
  2. Como é cd -Ldiferente do padrão cd?
  3. Como seria possível que o diretório de trabalho não pudesse ser determinado com êxito?
  4. O que é um exemplo de uso -@?

Responder1

OManual do Bashdá um pouco mais de detalhes.

  1. cd -Pgarante que você termine com 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 -Psignifica que o link simbólico de bpara a/bé desreferenciado. A interação com ..é ..normalmente processada removendo o componente do caminho anterior, se houver; não verificando o caminho no disco. Se você usar 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 tenho certeza sobre isso (posso imaginar como seria, mas Bash apenas diz “ cd: -@: opção inválida”; tenho a impressão de que atualmente só está disponível no Solaris, é necessário O_XATTR).

informação relacionada