AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 408859
Accepted
continuum
continuum
Asked: 2017-12-05 20:06:22 +0800 CST2017-12-05 20:06:22 +0800 CST 2017-12-05 20:06:22 +0800 CST

Em que circunstâncias o executável encontrado primeiro no caminho não será usado

  • 772

Estou tendo um comportamento estranho com zsh ( 5.4.2_1 instalado com homebrew ) no osx sem usar a primeira ocorrência de um executável no caminho.

Aqui está o cenário:

echo $PATHretorna:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

bebida está em ambos

/usr/local/Cellar/zplug/HEAD-9fdb388/bin     

e

usr/local/bin/brew

Isso é confirmado executando which -a brew que retorna:

/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew   
/usr/local/bin/brew

Mas quando executo qual bebida , ele retorna:

/usr/local/bin/brew

e a bebida corre /usr/local/bin/brewem vez de/usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

Como isso pode acontecer quando a fermentação está no início do caminho?

Ajuda apreciada.

zsh path
  • 2 2 respostas
  • 1221 Views

2 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2017-12-06T00:06:50+08:002017-12-06T00:06:50+08:00

    which -a cmdprocura todos os arquivos regulares nomeados para os cmdquais você tem permissão de execução nos diretórios em $path(além de aliases, funções, builtins...).

    Enquanto which cmdretorna o comando que zshseria executado ( whiché um built-in zshcomo em, tcshmas diferente da maioria dos outros shells).

    zsh, como a maioria dos outros shells, lembra os caminhos dos executáveis ​​em uma hashtabela para não ter que procurá-los em todos os diretórios $pathsempre que você os invoca.

    Essa tabela de hash (exposta na $commandsmatriz associativa em zsh) pode ser manipulada com o hashcomando (comando de shell POSIX padrão).

    Se você executou o brewcomando (ou which/type/whence brew, ou usou a conclusão do comando ou qualquer coisa que teria preparado esse hash/cache) antes de ser adicionado /usr/local/Cellar/zplug/HEAD-9fdb388/binou antes /usr/local/Cellar/zplug/HEAD-9fdb388/binde ser adicionado a $path, zshteria lembrado seu caminho e armazenado como $commands[brew]=/usr/local/bin/brew.

    Nesse caso, você pode usar hash -r(como no shell Bourne) ou rehash(como no csh) para zsh esquecer os comandos lembrados (invalidar esse cache ), para que ele possa procurá-lo na próxima vez e localizá-lo no novo local.

    • 26
  2. michael - mlc
    2017-12-06T02:23:44+08:002017-12-06T02:23:44+08:00

    /usr/local/bin/brewgeralmente é um link simbólico.

    assim /usr/local/bin/brewe /usr/local/Cellar/zplug/HEAD-9fdb388/bin/brew

    são provavelmente os mesmos arquivos.

    modelo:

    ls -al /usr/local/bin/brew
    

    confirmar.

    • 0

relate perguntas

  • Symlinking para todos os arquivos de ponto e diretórios

  • Como incrementar uma variável nomeada dinamicamente em `zsh`

  • Por que não consigo definir uma variável somente leitura chamada path no zsh?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve