Instalado o sqlite3 v3.8, mas o terminal mac ainda executa a versão antiga 3.6 por padrão

9

Eu tenho um Mac executando o OS X 10.6.8, que vem pré-instalado com o SQLite3 v3.6. Eu instalei a v3.8 usando homebrew. Mas quando digito "sqlite3" no meu terminal, ele continua executando a versão pré-instalada antiga. Qualquer ajuda?

Não tenho certeza se a variável PATH tem algo a ver com isso, mas executar echo $ PATH resulta no seguinte: /usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/ bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

E a NOVA versão do SQLite3 está no seguinte diretório: / usr / local / Cellar / sqlite

Devo acrescentar que também baixei o executável binário na minha área de trabalho, e isso funcionará se eu clicar na minha área de trabalho, mas não funcionar no terminal.

Qualquer ajuda seria muito apreciada?

BandfuzzAlex
fonte

Respostas:

2

$ PATH

Sim, você precisa definir sua PATHvariável da seguinte forma:

$ export PATH=/usr/local/Cellar/sqlite:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Essa linha pode ser um pouco difícil de ler, então aqui é dividida por dois pontos e cada caminho está em sua própria linha:

$ awk -v addPath="$1" 'BEGIN{RS=":";ORS=addPath "\n"}{$1=$1}1' <<< $PATH
/usr/local/Cellar/sqlite
/usr/local/bin
/Library/Frameworks/Python.framework/Versions/2.7/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin

A $PATHé uma lista de diretórios - separados por dois pontos ( :) - que o shell pesquisas por meio de um por um olhando para o que quer que você acabou de digitar no prompt. A ordem é importante, portanto, se sqliteaparecer em vários locais, o primeiro diretório em que foi encontrado é de onde será usado.

onde estão as coisas?

Você pode usar o typecomando para ver de onde vem um aplicativo específico.

Exemplos

$ type -a sqlite3 
sqlite3 is /usr/bin/sqlite3

Aqui estou usando-o com a -aopção que mostrará todas as ocorrências:

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls
slm
fonte
Isso funcionou! Muito obrigado. Não sabia como adicionar vários caminhos à declaração. Agora está claro que eles estão separados apenas por ":"
BandfuzzAlex 5/05
@ user46531 - que bom que seu problema foi resolvido. Obrigado pela pergunta.
slm
@ user46531 enquanto praticável, esta é a solução incorreta. veja minha resposta.
strugee
11

A solução da slm está realmente incorreta (enquanto utilizável). Ao usar o Homebrew, você não deve adicionar /usr/local/Cellar/*seu $ PATH; em vez disso, o que você deve fazer é adicionar /usr/local/binno seu $ PATH (o que você já fez) e depois vincular as coisas na adega /usr/local/bin. Como foi projetado dessa maneira, o Homebrew obviamente pode fazer isso com bastante facilidade para você:

brew link sqlite

criará automaticamente os links necessários. (O Homebrew não fez isso automaticamente para você neste momento porque o sqlite é apenas para barris, o que significa que você precisa fazer manualmente).

Como uma observação lateral / lembrete amigável, você nunca deve adicionar /usr/local/binao caminho do sistema, apenas o caminho do usuário. Isso ocorre caso os programas esperem o sqlite fornecido pela Apple, mas encontrem a versão fornecida pelo Homebrew, causando problemas.

strugee
fonte
1
Possivelmente não é uma boa ideia. preparar ligação sqlite: "Aviso: sqlite é barril-only e deve ser vinculado com force"
Marcelo Cantos
Sim - quais são as consequências negativas (se houver) de vinculá-lo à força? O que poderia quebrar? Eles realmente devem dar alguma indicação disso na mensagem de aviso.
Iconoclast