Por que o pwd não aceita opções longas como --physical?


11

Quando eu mostro o manual de pwdcomando, ele diz que opções longas --physicalsão suportadas

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

No entanto, falha ao digitar o seguinte

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Por que as opções longas não estão funcionando para mim?

Estou usando o RHEL 6.4. Nenhum alias para pwd está configurado. Parece que é pwd padrão:

$ which pwd
/bin/pwd

1
A página de manual é para um utilitário independente que não faz parte do bash.
Thomas Dickey

7
Use em typevez de which, pois whichmostra apenas comandos, enquanto typemostra palavras-chave, builtins, aliases, funções e comandos (e caminhos de comando com hash). Para mais detalhes, consulte Por que não usar "qual"? O que usar então?
Wjandrea

1
No meu sistema man pwdtem a seguinte nota: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsna parte inferior da DESCRIPTIONseção.
Nykakin

Respostas:


26

bashpossui um comando interno pwdque é o que você está usando quando simplesmente digita pwdno seu shell.

Para obter o pwddescrito pela página de manual, você precisa forçar o uso do comando externo. Você pode fazer isso especificando o caminho completo para o executável ( /bin/pwdno seu caso) ou acrescentando envantes da linha :, env pwdque inicia o envcomando que pode ser usado para adicionar configurações ao ambiente (mas que não é feito aqui) e, em seguida, envinicia o comando especificado. Como envnão tem um builtin pwd, o "real" /bin/pwdé executado.

A vantagem do built- pwdin no bash é que bashcontrola o diretório atual, obtendo o valor a custo zero, enquanto o comando externo precisa procurar no sistema de arquivos para determinar o caminho, o que requer muito mais IO.


4
Não é assim que o comando externo realmente funciona. unix.stackexchange.com/a/413225/5132
JdeBP

BTW: Você também pode desativar o shell interno (pelo menos no bash) porenable -n pwd
derobert

@JdeBP Costumava ser a última vez que olhei (há muito tempo :-)); e enquanto agora usa a getcwd()chamada do sistema, o kernel ainda percorre o sistema de arquivos, o que é mais fácil de fazer no espaço do kernel devido ao acesso a estruturas de dados relevantes, como a resposta vinculada declara: "No entanto, observe que mesmo no FreeBSD e nos outros sistemas operacionais sistemas, o kernel não acompanha o diretório de trabalho com uma string ".
wurtel 22/01/19

11

Essa página de manual documenta /bin/pwd, mas quando você executa, pwdvocê está usando o shell interno; veja a saída de

type pwd

O built-in do seu shell pwdnão suporta opções longas (consulte a documentação do seu shell; como você está usando o Bash, help pwdfornecerá um resumo).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.