$ PATH me está volviendo loco


10

Bien, disculpas si esto es algo tonto, pero me estoy quedando sin ideas.

Objetivo: anteponer /usr/local/bina$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 fishshell (¡porque es amigable!) homebrewY lo configuré como mi shell predeterminado (debajo system prefs>users & groups>advanced). En algún momento, corrí brew doctorpara ver si mis instalaciones eran todas kosher, y sugirió que me moviera /usr/local/binal frente $PATHpara poder usar mi instalación en gitlugar de la copia del sistema. Bien, pero entre path_helpery fish, algo le estaba sucediendo a $PATHeso 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 xcodee instalado devtools, además x11, homebrewyfish

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/bina la parte superior /etc/pathspero no cambió nada. Miré a través de los diversos config.fisharchivos 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 +xa mi profiley cuando comienzo terminal.appobtengo:

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 $PATHredes me /usr/bin:/bin:/usr/sbin:/sbin. Entonces, ¿parece que path_helperya 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!


tenga en cuenta que puedo hacerlo funcionar fishcreando ~/.config/fish/config.fishcon, set PATH /usr/local/bin $PATHpero todavía tengo el problema de que path_helperaparentemente no funciona como debería y, por lo $PATHtanto, está incompleto. También todavía tienen el problema de diferentes $PATHpara scripts, aplicaciones comenzado desde la interfaz gráfica de usuario, etc.
Chris4d

Respuestas:


5

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

/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'

debería hacer el trabajo:

[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization


¡Excelente! Esto es lo que tengo ahora: 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.3
topskip

3

No 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:

 PATH=/usr/local/bin:$PATH

¡Espero que esto ayude!


Gracias Aaron: path_helperes una utilidad específica de OSX que supuestamente se establece $PATHen el inicio de sesión leyendo a partir de /etc/pathsentonces /etc/paths.d/*. De todos modos, entiendo que su sugerencia debería solucionarme bash, pero en realidad quiero que funcione fish(y consistentemente en todo el sistema, si eso no es demasiado esperar).
Chris4d

Ah, perdón por eso. Yo tampoco soy un usuario de OS X, es una pena, pero por un poco de Google Bashing parece que esta pregunta de Stack Overflow podría parecerse más a lo que buscas. Dicho esto, una vez más, no soy un Yo mismo usé OS X, y solo respondí porque una mirada rápida (léase: descuidada) a su pregunta me hizo pensar que solo estaba interesado en bash, así que siga mi consejo aquí con varios granos de sal. Espero que ayude, de todos modos
Aaron Aaron

3

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í:

  1. path_helperse llama desde /etc/profile, por la sintaxis eval '/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ó profilede cargar path_helper. Reemplazó los ticks posteriores y ahora funciona como debería (por supuesto).
  2. usar set PATH /usr/local/bin $PATHen mi ~/.config/fish/profile.fishasegura que obtengo el orden correcto en mi shell preferido, pero mientras path_helperfuncione, puede ser redundante.
  3. Para garantizar que el completo $PATHesté disponible para scripts, aplicaciones GUI, etc., parece ser una sacudida entre ... launchd.confy environment.plisttodavía está investigando eso.

1
Leí el otro día (pero no recuerdo la fuente) que 10.8 ya no ofrece una forma segura de obtener una ruta visible para todas las aplicaciones. Recuerdo en particular que environment.plist ya no se lee; Soy vagamente consciente de launchd.conf, por lo que podría funcionar, pero creo que el artículo sugirió que no lo haría.
echristopherson

1
más seguimiento: no parece que path_helper funcione en absoluto en peces; genera sintaxis csh o bash, las cuales son incompatibles. En su lugar, puede usar ~ / .config / fish / config.fish (el script de inicio de peces) para cat /etc/paths.d/* y agregarlos a $ PATH. Espero que ayude a alguien!
Chris4d

¿siquiera leíste mi respuesta? ha estado allí desde cuatro meses antes de su seguimiento
anddam
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.