Примеры опций bash cd, например: cd -Pe@ $directory

Примеры опций bash cd, например: cd -Pe@ $directory

В bash 4.4.12, help cdговорит:

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

Мне трудно уложить эти слова в голове, и мой Google-фу ничего не может выдать.

  1. Какой пример показывает, что cd -Pпредпочтительнее cd?
  2. Чем cd -Lотличается от стандарта cd?
  3. Как могло случиться, что рабочий каталог не удалось определить успешно?
  4. Какой пример использования -@?

решение1

TheРуководство по Башудает немного больше подробностей.

  1. cd -Pгарантирует, что вы получите «реальный» путь:

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

    Использование -Pозначает, что символическая ссылка с bна a/bразыменовывается. Взаимодействие с ..это, ..как правило, обрабатывается путем удаления предыдущего компонента пути, если он есть; а не путем проверки пути на диске. Если вы используете много символических ссылок, это может оказаться очень запутанным.

  2. cd -Lэквивалентно значению по умолчанию cd.

  3. Текущий рабочий каталог не может быть определен, если он был удален:

    $ 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
    

    в.

    $ cd -Pe ..; echo $?
    cd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
    1
    
  4. В этом я не уверен (я могу себе представить, как это будет выглядеть, но Bash просто выдает « cd: -@: invalid option»; у меня сложилось впечатление, что в настоящее время это доступно только в Solaris, для этого нужно O_XATTR).

Связанный контент