OK, desculpas se isso é algo estúpido, mas estou ficando sem ideias.
Objetivo: anexar /usr/local/bin
a$PATH
Problema: $PATH
não farei o que quero ou espero
Como cheguei aqui: quero começar a aprender a programar, por isso estou me sentindo confortável brincando sob o capô, mas não tenho muita experiência. Eu instalei o fish
shell (porque é amigável!) Usando homebrew
e o defini como meu shell padrão (abaixo system prefs>users & groups>advanced
). Em algum momento, corri brew doctor
para ver se minhas instalações eram todas kosher e sugeri que eu fosse /usr/local/bin
para a frente $PATH
para que eu pudesse usar minha instalação git
em vez da cópia do sistema. Tudo bem - mas entre path_helper
e fish
, algo estava acontecendo com $PATH
isso estava fora do meu controle, e eu nunca conseguia organizar os caminhos da maneira certa.
Ambiente: OSX 10.8.2, atualizado a partir 10.7ish, com xcode
e devtools instalado, além de x11
, homebrew
efish
Mais informações: eu definir shell default costas do meu usuário bash
, e tentou uma variedade de conchas através terminal.app
- bash
, fish
, sh
. Eu mudei /usr/local/bin
para o topo, /etc/paths
mas não mudou nada. Eu olhei através dos vários config.fish
arquivos e comentei coisas que poderiam mexer com $ PATH, não ajudaram. Eu tenho os seguintes arquivos em /etc/paths.d/
:
./10-homebrew
contendo /usr/local/bin
./20-fish
contendo /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz
contendo /opt/X11/bin
Eu adicionei set +x
ao meu profile
e, quando começo terminal.app
, recebo:
Last login: Mon Oct 1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4
Chriss-iMac:~ c4$
Portanto, parece que corre path_helper, mas em seguida, executando echo $PATH
redes de me /usr/bin:/bin:/usr/sbin:/sbin
. Então, parece que path_helper
nem está mais fazendo o que deveria?
Tenho certeza de que existe algum comportamento bem definido aqui que não entendo ou quebrei algo enquanto tentava corrigi-lo. Por favor ajude!
fish
com isso criando~/.config/fish/config.fish
com,set PATH /usr/local/bin $PATH
mas ainda tenho o problema depath_helper
aparentemente não funcionar como deveria e,$PATH
portanto, estar incompleto. Também tem a questão de diferente$PATH
para scripts, aplicativos iniciados na GUI etc.Respostas:
solução:
escolha se deseja uma configuração para todo o sistema ou uma configuração do usuário e edite o arquivo de configuração apropriado, não use path_helper com o fish.
Mais
fish não origina / etc / profile, para todo o sistema e configuração do usuário, ele lerá /etc/fish/config.fish e ~ / .config / fish / config.fish respectivamente [1].
path_helper destina-se ao uso de shells que originam um arquivo de perfil amplo do sistema (sh, csh e seus derivados). Como o 10.7 path_helper parece honrar a ordem no / etc / caminhos, o AFAIR não o fez na 10.6 e isso foi mais difícil de lidar.
Se você realmente deseja usar o path_helper com o peixe, precisará analisar sua saída, pois ele fornecerá apenas a sintaxe sh e csh com as opções -s e -c .
Algo como
deve fazer o trabalho:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
fonte
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- funciona bem aqui com peixes 2 e Mac OS 10.8.3Não tenho absolutamente nenhuma idéia sobre o /etc/paths.d, path_helper, etc., todos os quais parecem complicações excessivas para mim, mas o seguinte no final do seu ~ / .bashrc deve te acertar:
Espero que isto ajude!
fonte
path_helper
é um utilitário específico para OSX que supostamente define o$PATH
login lendo/etc/paths
e depois/etc/paths.d/*
. De qualquer forma, entendo que sua sugestão deve ser corrigidabash
, mas eu realmente quero que ela funcionefish
(e de forma consistente em todo o sistema, se não houver muito o que esperar).Agradecemos a Aaron por responder e por todos aqueles que responderam outras perguntas semelhantes nos sites de stackexchange. Por uma questão de posteridade, eis o que eu descobri:
path_helper
é chamado from/etc/profile
, pela sintaxeeval '/usr/libexec/path_helper -s'
(onde os apóstrofos são na verdade backticks). Como um boneco, eu não sabia como funcionavam os backticks e, por algum motivo, os havia mudado para aspas. Isso me impediuprofile
de carregarpath_helper
. Substituiu os back-ticks e agora funciona como deveria (é claro).set PATH /usr/local/bin $PATH
no meu~/.config/fish/profile.fish
garante que eu recebo a ordem certa no meu shell preferido, mas enquantopath_helper
funciona, pode ser redundante.$PATH
esteja disponível para scripts, aplicativos da GUI, etc., parece ser um lance entrelaunchd.conf
eenvironment.plist
... ainda está pesquisando esse.fonte