Temos muitas dúvidas que abordam um caminho absoluto , ora para arquivos, ora para comandos. Quero uma pergunta central da base de conhecimento sobre o que exatamente um caminho absoluto faz em relação aos comandos (não apenas aos arquivos).
O que um caminho absoluto para comandos alcança e como isso afeta o trabalho em Unix e Linux?
- Como um caminho absoluto se comporta de maneira diferente de um caminho relativo ?
- O caminho absoluto substitui a configuração do ambiente
$PATH
? - Acontece alguma coisa adicional na substituição do comando:
$(/bin/echo Hello world)
- Um caminho absoluto é melhor em scripts?
- Por que às vezes existem muitos caminhos absolutos para um comando?
/usr/bin/echo
/bin/echo
- Ambos funcionam no mesmo sistema
- É mais consistente entre distros ou preferido pelo POSIX?
- Por que alguns comandos, como
cd
não têm nenhum caminho absoluto ? - Por que usaríamos ou não usaríamos um caminho absoluto em scripts?
- Caminhos absolutos são relevantes em scripts
- Os intérpretes de shell se preocupam com caminhos absolutos , como
bash
vszsh
?
Desambiguação
- Isso pergunta sobre qualquer comando:
- Caminho absoluto (
/usr/bin/echo
) - Em contraste com seu caminho relativo (
echo
)
- Caminho absoluto (
- Não estou perguntando sobre caminhos canônicos no que se refere a links simbólicos.
- Não estou perguntando sobre caminhos absolutos versus relativos versus canônicos ou sua definição básica (ou seja: nome de arquivo POSIX com
/
barra indicando árvore de diretórios , etc.)
Os caminhos absolutos e relativos são substituídos
$PATH
. O que importa é se a/
está presente. Se for/some/command
ou./some/command
ousome/command
, o comando naquele local, seja absoluto ou relativo, será executado, em vez de ser consultado em$PATH
. Se estiversome-command
sem barra, será pesquisado em$PATH
. A substituição de comando não afeta isso.Isso depende do sistema. Em sistemas Linux com UsrMerge (mesmo que a página mencione o Fedora, isso inclui Ubuntu, Debian, Arch Linux recentes, etc.),
/bin
é um link simbólico para/usr/bin
, então/bin/echo
e/usr/bin/echo
são iguais. No Solaris, mais utilitários compatíveis com os padrões são fornecidos nas seções XPG: Quando usar a versão XPG* de um comando? Outros sistemas podem ter outros motivos.Às vezes eles fazem isso: Qual é o objetivo do comando externo `cd`? , às vezes não: Por que o cd não é um programa?
Quanto a todos os "deveria" e "não deveria", depende do que você deseja fazer. Às vezes, tenho visto pessoas usarem caminhos absolutos porque acham que isso as manterá protegidas de qualquer versão alternativa de ferramentas que um usuário possa ter instalado. Às vezes, tenho visto isso causar problemas para pessoas que tentam portar software para outro sistema onde as ferramentas nesses caminhos absolutos não são as esperadas, mas as versões alternativas instaladas pelo usuário teriam funcionado.