Quando eu mostro o manual de pwd
comando, ele diz que opções longas --physical
sã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
type
vez dewhich
, poiswhich
mostra apenas comandos, enquantotype
mostra 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?man pwd
tem 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 supports
na parte inferior daDESCRIPTION
seção.Respostas:
bash
possui um comando internopwd
que é o que você está usando quando simplesmente digitapwd
no seu shell.Para obter o
pwd
descrito 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/pwd
no seu caso) ou acrescentandoenv
antes da linha :,env pwd
que inicia oenv
comando que pode ser usado para adicionar configurações ao ambiente (mas que não é feito aqui) e, em seguida,env
inicia o comando especificado. Comoenv
não tem um builtinpwd
, o "real"/bin/pwd
é executado.A vantagem do built-
pwd
in no bash é quebash
controla 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.fonte
enable -n pwd
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 ".Essa página de manual documenta
/bin/pwd
, mas quando você executa,pwd
você está usando o shell interno; veja a saída deO built-in do seu shell
pwd
não suporta opções longas (consulte a documentação do seu shell; como você está usando o Bash,help pwd
fornecerá um resumo).fonte