Bien, disculpas si esto es algo tonto, pero me estoy quedando sin ideas.
Objetivo: anteponer /usr/local/bin
a$PATH
Problema: $PATH
no haré lo que quiero o espero
Cómo llegué aquí: quiero comenzar a aprender a programar, así que me siento cómodo jugando bajo el capó, pero no tengo mucha experiencia. Instalé el fish
shell (¡porque es amigable!) homebrew
Y lo configuré como mi shell predeterminado (debajo system prefs>users & groups>advanced
). En algún momento, corrí brew doctor
para ver si mis instalaciones eran todas kosher, y sugirió que me moviera /usr/local/bin
al frente $PATH
para poder usar mi instalación en git
lugar de la copia del sistema. Bien, pero entre path_helper
y fish
, algo le estaba sucediendo a $PATH
eso estaba fuera de mi control, y nunca pude arreglar los caminos de la manera correcta.
Medio Ambiente: OSX 10.8.2, actualiza desde 10.7ish, con xcode
e instalado devtools, además x11
, homebrew
yfish
Más información: He retroceder shell por defecto de mi usuario bash
, y trató de una variedad de conchas a través de terminal.app
- bash
, fish
, sh
. Me mudé /usr/local/bin
a la parte superior /etc/paths
pero no cambió nada. Miré a través de los diversos config.fish
archivos y comenté cosas que podrían interferir con $ PATH, no ayudó. Tengo los siguientes archivos en /etc/paths.d/
:
./10-homebrew
que contiene /usr/local/bin
./20-fish
que contiene /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz
que contiene /opt/X11/bin
Agregué set +x
a mi profile
y cuando comienzo terminal.app
obtengo:
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$
Así que parece que corre path_helper, pero luego corriendo echo $PATH
redes me /usr/bin:/bin:/usr/sbin:/sbin
. Entonces, ¿parece que path_helper
ya ni siquiera está haciendo lo que se supone que debe hacer?
Estoy seguro de que hay un comportamiento bien definido aquí que no entiendo, o borked algo al tratar de solucionarlo. ¡Por favor ayuda!
fish
creando~/.config/fish/config.fish
con,set PATH /usr/local/bin $PATH
pero todavía tengo el problema de quepath_helper
aparentemente no funciona como debería y, por lo$PATH
tanto, está incompleto. También todavía tienen el problema de diferentes$PATH
para scripts, aplicaciones comenzado desde la interfaz gráfica de usuario, etc.Respuestas:
solución:
elija si desea una configuración de todo el sistema o una configuración de usuario y edite el archivo de configuración apropiado, no use path_helper con fish.
más
fish no obtiene / etc / profile, para todo el sistema y la configuración del usuario leerá /etc/fish/config.fish y ~ / .config / fish / config.fish respectivamente [1].
path_helper está diseñado para usar para shells que generan un archivo de perfil de todo el sistema (sh, csh y sus derivados). Como 10.7 path_helper parece honrar el orden en / etc / paths, AFAIR no lo hizo en 10.6 y fue más difícil de manejar.
Si realmente desea utilizar path_helper con fish, deberá analizar su salida, ya que solo proporcionará la sintaxis sh y csh con las opciones -s y -c .
Algo como
debería hacer el trabajo:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
fuente
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- funciona bien aquí con fish 2 y Mac OS 10.8.3No tengo absolutamente ninguna idea sobre /etc/paths.d, path_helper, & c., Todo lo cual me parece una complicación excesiva, pero lo siguiente al final de su ~ / .bashrc debería aclararlo:
¡Espero que esto ayude!
fuente
path_helper
es una utilidad específica de OSX que supuestamente se establece$PATH
en el inicio de sesión leyendo a partir de/etc/paths
entonces/etc/paths.d/*
. De todos modos, entiendo que su sugerencia debería solucionarmebash
, pero en realidad quiero que funcionefish
(y consistentemente en todo el sistema, si eso no es demasiado esperar).Gracias a Aaron por responder y por todos los que respondieron otras preguntas similares en los sitios de stackexchange. Por el bien de la posteridad, esto es lo que descubrí:
path_helper
se llama desde/etc/profile
, por la sintaxiseval '/usr/libexec/path_helper -s'
(donde los apóstrofes son realmente backticks). Como un muñeco, no sabía cómo funcionaban los backticks, por lo que los había cambiado a comillas por alguna razón. Esto me rompióprofile
de cargarpath_helper
. Reemplazó los ticks posteriores y ahora funciona como debería (por supuesto).set PATH /usr/local/bin $PATH
en mi~/.config/fish/profile.fish
asegura que obtengo el orden correcto en mi shell preferido, pero mientraspath_helper
funcione, puede ser redundante.$PATH
esté disponible para scripts, aplicaciones GUI, etc., parece ser una sacudida entre ...launchd.conf
yenvironment.plist
todavía está investigando eso.fuente