Entendiendo el PATH


#1

Hola gente, esta mañana he cerrado un hilo diciendo a Xavier N. que
lo
primero que iba a hacer para continuar mi apredizaje era mirarme bien
el
tema del RUBYPATH y de $:. Bien, antes incluso de esto, me dispongo
a instalar ruby, rails,mysql,… en fin, el mundo rails y alrededores.

Para hacerlo voy a seguir este mítico tutorial (a mi me parece que es
mítico, porque me lo he encontrado en muchas ocasiones cuando googleo)
[1]
Antes este blog se llamaba Hivelogic.

Bueno, al tema que me voy a cenar. :slight_smile:
Tengo un precioso MAC OS X Leopard 10.5 comprado (no soy rico, pero en
el
curro uso Mac y sólo le veo ventajas, así que hice la inversión). Este
como
todos los demas :slight_smile: trae Ruby y Rails de serie.
Lo trae instalado en:
#!/usr/bin/ruby

Y esto, según Dan Benjamin [1] es una mala idea, ya que este directorio
es
susceptible de sufrir actualizaciones automáticas por parte de Apple,
cosa
que esta bien para que todo el OS funcione bien. Ellos mandan, yo sólo
lo
uso
El caso es que este tio dice que si situamos todo nuestro software
personal
(el que compilamos nosotros Ruby, Rails, mysql, httpd,…) en:
#!usr/local/ruby

Estara a salvo de las actualizaciones automáticas. Es algo que por
convenio
han establecido lo sistemas Like-UNIX (Como Mac OS X).

¿Que pensais de lo que he contado? ¿Es una chorrada? ¿Tiene razón?

A mi me da igual, lo voy a hacer para enfrentarme al tema de los PATH’s
que
es algo que me trae loco.
Se que hay gente que es partidaria de una tercera opción, que sería usar
MacPORTS [2]. Puede que sea comodo e igual en un futuro es mi opción,
pero
para aprender a compilar, tengo que compilar :slight_smile: ¿no?

MI PREGUNTA:
Una vez que me decido a hacerlo, empiezo el tutorial y me dice lo
siguiente:
-----------------------------------______---------------------------------------------

By default, tell the system to look in /usr/local for files first by
editing your path. On Mac OS X,

either create or edit a file called .bash_login in your home folder
(note
the “.”, it’s a hidden file)

and add the following line to it:

export PATH="/usr/local/bin:/usr/local/sbin:$PATH"

-----------------------------------______---------------------------------------------
Yo he buscado este archivo en “/Users/andres” ¿¿mi home??? ¿est0 es lo
que
el llama HOME o Es dos niveles por encima. AQUí: “/” ?
Bueno, buscando en “/Users/andres” con “ls -a” lo más parecido que tengo
es:
.bash_history.

Mis 5 preguntas: (son muchas, pero rápidas de contestar. Para el que las
sepa claro :slight_smile: )

1- Mac OS X trae el .bash_login creado por defecto???

2- He leido [3] que la configuración del PATH no solo se puede hacer en
este
fichero, sino que también se puede establecer en otros dos (.bash_login,
.bash_profile y .profile)
Yo no tengo (no veo) ninguno de los tres. ¿Es normal esto?

3- ¿En cual de los tres debería de poner lo de: “export
PATH=”/usr/local/bin: /usr/local/sbin:$PATH" ?

4- Por cierto ¿Como funciona lo de (export)? el sistema lee el fichero y
une
todas las sentencias export que haya y las une para hacer el PATH?

5- Debería de haber algun otro “camino” en el fichero que vosotros me
digais, a aprte de usr/local?

Ha sido un hilo largo, pero al contrario que el último, creo que esta
vez me
expresado con claridad, y que el que sepa menos que yo va a aprender
algo
leyendolo.
A mi me gustaría encontrarme algo así si acabase de empezar con el tema
del
terminal y los PATH’s

Un saludo y muchas gracias por adelantado

[1] http://danbenjamin.com/articles/2008/02/ruby-rails-leopard
[2] http://www.macports.org/
[3]
http://macosx.com/forums/mac-os-x-system-mac-software/299629-bash-login-problem.html


#2

Buenas Andres,

contesto rápido que todavia tengo que cenar:

  1. No
  2. Es normal
  3. En el que quieras, todos te sirven
  4. export es un comando de unix-like para setear variables de entorno,
    en este caso estás seteando la variable de entorno PATH que la usa el
    sistema operativo y un millar de aplicaciones unix-like para buscar
    automaticamente executables, es decir, si tu haces desde la linea de
    comandos “grep loquesea”, el binario grep está en un directorio
    especificado en el PATH y por esto el sistema operativo lo encuentra y
    lo ejecuta. El orden de búsqueda va en función del orden en el que
    aparecen los directorios en el PATH, por esto, si tienes un binario
    “ruby” en /usr/local/bin/ruby y otro en /usr/bin/ruby, en función de
    que directorio tengas ANTES en el path, te ejecutará uno o otro cuando
    pongas “ruby” en la linea de comandos. Si no lo pusieras en el path
    tendrias que poner /usr/local/bin/ruby para ejecutar el ruby que tu
    quieres y no el que el sistema encuentra. (Vaya tooooochooo!!!)
  5. /usr/local lo veo como la mejor opción para meter cosas compiladas
    por ti, macports lo pone en /opt/local, pero… al final da lo mismo
    si es tu maquina y solo la tocas tu.

Espero haver servido de ayuda!

Saludos,

Isaac Feliu


#3

Andrés gutiérrez
escribió:> Hola gente, esta mañana he cerrado un hilo diciendo a Xavier N. que

lo primero que iba a hacer para continuar mi apredizaje era mirarme
bien el tema del RUBYPATH y de $:. Bien, antes incluso de esto, me
dispongo
a instalar ruby, rails,mysql,…
… bla bla bla bla …

Andrés, se que en esta lista somos mega guays y super enrollados y
sabemos un huevo de todo, pero esta lista es de rails y hay que intentar
ceñirse al tema pero, como tampoco quiero ser borde.

cuando pones

rails killer_web_app -d mysql

en realidad bash, la shell, hace

/usr/bin/rails killer_web_app -d mysql

bash usa la variable de entorno PATH para encontrar los programas

¿Como los encuentra? Primero busca en una lista de comandos “built-in”
como export, for, if, etc… si no lo encuentra busca en la variable de
entorno PATH y por orden en las carpetas va buscando.

puedes acceder a una variable de entorno anteponiendole un $, ejemplo:

host:~ user$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

puedes establecerlas usando export
host:~ user$ export PATH=/new/path:$PATH
host:~ user$ echo $PATH
/new/path:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

donde esta rails?

host:~ user$ whereis rails
/usr/bin/rails

NOTA: en lo referente al path la shell requiere que los archivos sean
ejecutables (en MacOSX como en los demas unix, tener permiso de
ejecucion x, ver comando chmod para mas detalles sobre permisos)

NOTA: Puedes ver todas las variables de entorno ejecutando export sin
parametros
host:~ user$ export
declare -x Apple_PubSub_Socket_Render="/tmp/launch-QXYN2p/Render"
declare -x COMMAND_MODE=“unix2003”
declare -x DISPLAY="/tmp/launch-x3MvM8/:0"
declare -x HOME="/Users/user"
declare -x LANG=“es_ES.UTF-8”
declare -x LOGNAME=“user”
declare -x MANPATH="/usr/share/man:/usr/local/share/man:/usr/X11/man"
declare -x OLDPWD="/Users/user"
declare -x
PATH="/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin"
declare -x PWD="/Users/user/dbm"
declare -x SECURITYSESSIONID=“ab233ca1”
declare -x SHELL="/bin/bash"
declare -x SHLVL=“1”
declare -x TERM=“xterm-color”
declare -x TERM_PROGRAM=“Apple_Terminal”
declare -x TERM_PROGRAM_VERSION=“240”
declare -x USER=“user”

-----------------------------------______---------------------------------------------
Yo he buscado este archivo en “/Users/andres” ¿¿mi home??? ¿est0 es lo
que el llama HOME o Es dos niveles por encima. AQUí: “/” ?

Tu home es $HOME en tu caso /Users/andres, en unix normalmente seria
/home/andres

Bueno, buscando en “/Users/andres” con “ls -a” lo más parecido que
tengo es: .bash_history.

El historial de comandos, puedes verlo con el comando history

Mis 5 preguntas: (son muchas, pero rápidas de contestar. Para el que
las sepa claro :slight_smile: )

1- Mac OS X trae el .bash_login creado por defecto???

no

2- He leido [3] que la configuración del PATH no solo se puede hacer
en este fichero, sino que también se puede establecer en otros dos
(.bash_login, .bash_profile y .profile)
Yo no tengo (no veo) ninguno de los tres. ¿Es normal esto?

si

3- ¿En cual de los tres debería de poner lo de: “export
PATH=”/usr/local/bin: /usr/local/sbin:$PATH" ?

yo la mia la tengo en $HOME/.profile

4- Por cierto ¿Como funciona lo de (export)? el sistema lee el fichero
y une todas las sentencias export que haya y las une para hacer el PATH?

Durante el arranque lee estos archivos en un orden determinado y los
ejecuta en la shell. Si pones
echo “que chachi soy” en .profile y abres un nuevo terminal veras

Last login: Thu Jan 15 22:16:52 on ttys007
que chachi soy
host:~ user$

5- Debería de haber algun otro “camino” en el fichero que vosotros me
digais, a aprte de usr/local?

¿cosas que tengan bin?

Ha sido un hilo largo, pero al contrario que el último, creo que esta
vez me expresado con claridad, y que el que sepa menos que yo va a
aprender algo leyendolo.

Bueno ahora sabes que eso que preguntabas tiene que ver con unix, osx.
La proxima de rails :wink:
Puede que alguien te pueda aconsejar alguna lista en español sobre el tema.

A mi me gustaría encontrarme algo así si acabase de empezar con el
tema del terminal y los PATH’s

Si frotas mucho la manzana, sale un genio que responde a todas tus
preguntas :wink:

Un saludo y muchas gracias por adelantado

[1] http://danbenjamin.com/articles/2008/02/ruby-rails-leopard
[2] http://www.macports.org/
[3]
http://macosx.com/forums/mac-os-x-system-mac-software/299629-bash-login-problem.html

Algunos comandos utiles en linux, muchos extrapolables a osx

http://www.pixelbeat.org/cmdline_es_AR.html

procuren no romper sus ordenadores, recuerden, un gran poder conlleva
una gran responsabilidad.


#4

HAs sido de mucha ayuda Isaac. Esta tarde lo pruebo desde casa

Gracias mil

Un saludo

El 15 de enero de 2009 23:20, Isaac Feliu Pérez
removed_email_address@domain.invalidescribió:


#5

Ahora me toca darte las gracias a ti cartuchoGL. Me lo has explicado
igual
de bien que Isaac, y eso que te ha tocado los cojo… :slight_smile: Es de
agradecer

Un poquito de polémica:
Dices que esta lista es de Rails. Si pero no puedes llegar a sentirte
comodo
ejecutando cositas por terminal (rake, rails,…) si no te sientes
comodo
con el terminal. Pienso que no esta demás que en una lista de rails se
explique en algún hilo como llegar a tener todo funcionando, y como
entender
algunos conceptos básicos del SO. En especial UNIX que es donde acabaran
en
producción la mayoría de las rails App

Pero esta es solo mi opinión. La opinión de un NO licenciado en
informática
que no ha pasado por los mismos caminos que un INFORMÁTICO.

Lo dicho CartuchoGL, muchísimas gracias.

HAs sido de mucha ayuda Isaac. Esta tarde lo pruebo desde casa


#6

Ror-es mailing list
removed_email_address@domain.invalid
http://lists.simplelogica.net/mailman/listinfo/ror-es


#7

Lo estuve buscando antes pero no lo encontre, una comparativa de unixes

http://bhami.com/rosetta.html

Un saludo.


#8

2009/1/16 Andrés gutiérrez removed_email_address@domain.invalid

OFF-TOPIC. Pero ayer cuando abri el hilo no lo vi tan off-topic

No voy a regañar :slight_smile: El principio que aplico, o intento, a estas
cuestiones
de los offtopics opinables o nebulosos, es que siempre que se pueda se
concede el beneficio de la duda a cambio de que se mantengan ‘short &
sweet’. En este caso ha fluido la información de forma enriquecedora, se
han
solucionado dudas y, ya que empieza a ser menos ‘short’, lo cerramos ya,
y
podemos decir que nadie ha resultado herido :slight_smile:


#9

Por mi todo ok. Para mi ha sido muy enriquecedor.
Sólo un tema. Y el que avisa no es traidor.
Yo no he probado todavía todo esto que me han explicado y puede que me
salte
alguna duda.
¿puedo seguir con el hilo para terminar de hacerlo funcionar?
¿o sera demasiado?
No es coña, no quiero molestar. Y si me dices que NO, por mi queda
cerrado
el hilo.
Aunque me vendría muy bien tenerlo abierto durante esta tarde que es
cuando
voy a ponerme a compilar, descargar, cambiar PATH’s,…todo el rollo, la
idea es despertarme el sabado con todo(Ruby, RoR, mysql,…) update en
usr/local/bin :slight_smile:

Ya me dirás

gracias a todos

El 16 de enero de 2009 13:06, Manuel González Noriega <
removed_email_address@domain.invalid> escribió:


#10

Hola Guillermo, gracias a ti también por contestar. y en cuanto a lo de
que
no es sitio para esta pregunta, ya le he contestadop en este mismo hilo
a
cartuchoGL. Ya he dado mi punto de vista, pero vale, comprendo y acepto
el
vuestro:

Por cierto, este tema no tiene nada que ver con rails, y tenemos un admin
que se mosquea facilmente cuando no se cumplen las reglas de la lista.
Te

recomiendo hablar en bajito por si acaso se entera.

Manuel, no hace falta que me regañes :slight_smile: ya lo he entendido y veo que es
OFF-TOPIC. Pero ayer cuando abri el hilo no lo vi tan off-topic

un saludo,
El 16 de enero de 2009 12:42, Guillermo Álvarez Fernández <
removed_email_address@domain.invalid> escribió:


#11

Buenos dias. Espero no crispar a nadie, se que este es el tercer mensaje
que
no debería haber escrito desde que Manuel cerro el hilo. En serio lo sé.
Pero es que estoy buscando por Google y no encuentro un pequeño detalle
que
me está volviendo loco. Lo que si es cierto es que esta super
relacionado
con el resto del hilo.

Lo que dije en mi ultimo mensaje lo mantengo. todo lo instale bien y no
hubo
problema. Pero el otro dia, en este mismo hilo, cartuchoGL uso un
comando
“whereis” para mostrarme donde estaba el ejecutable del comando ruby
(por
ejemplo) esto daba:
andres$ whereis ruby
/usr/bin/ruby

Pero lo que me vuelve loco es que hoy, que se supone que he cambiado el
$PATH:
andres$ echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
Me sigue mostrando lo mismo!!!

Pero si ejecuto “which”, si que me muestra el ruby que tengo en el dir
local:
which ruby
/usr/local/bin/ruby

3 PREGUNTAS:
¿Qué está pasando?
¿WHEREIS y WHICH no son equivalentes?
¿Me falta por cambiar algo para estar seguro que estoy funcionando
siempre
desde /usr/local/bin?

Gracias y en serio que me gustaría ser más coherente y no tener que
recurrir
de nuevo a la lista. Pero nuevamente pienso que es una pregunta que
puede
completar más el hilo. Aunque a alguien que tenga el culo pelado de
manejarse en UNIX-like SO le repatee verla en una lista de Rails. Yo
entiendo el punto de vista de estas personas. Pero pensad que os encanta
rails y no tenéis esa experiencia previa con UNIX.

No sé, igual es un OFF-TOPIC gigante y yo un pesado de la ost…

Un saludo, y como siempre deseando venir a la lista con temas cada vez
menos
OFF-TOPIC

El 17 de enero de 2009 21:40, Andrés gutiérrez
removed_email_address@domain.invalidescribió:


#12

Hola Andrés tu crees que podria ser por el orden del PATH?

/usr/local/bin:…/usr/bin:…

(Creo que hace falta una siesta)

Saludos.


#13

Y tanto que me hace falta una siesta!!!
Porque no te pillo :frowning:

/usr/local/bin:…/usr/bin:…

No se supone que pilla primero lo que primero va en la variable
$PATH???
/usr/local…va lo primero de todo no?
echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin

Pues lo dicho, no se lo que me quieres decir…Y lo de la siesta lo
dejare
para otro día. tengo un precioso tutorial de Ruby delante

Un saludo
El 18 de enero de 2009 14:09, Ruben. D. removed_email_address@domain.invalid
escribió:


#14

Hola, siento ser yo otra vez. Pero la buena noticia es que no es para
reabrir el hilo. Es sólo para decir que gracias a los tutoriales de Dan
Benjamin y a vosotros ahora tengo todo lo necesario para trabajar con
Rails en desarrollo en Mac funcionando desde /usr/local/bin!!!

También decir que hoy he empezado un blog. Más bien va a ser un cuaderno
de
apuntes para las cositas que me vayan quedando claras he publicado lo
que se
ha hablado en esta lista asi como los enlaces a los articulos de dan
Benjamin. Esta aquí [1]. Puede que no me explique con claridad o que me
equivoque en algún concepto. Si creís que hay cosas que puedo cambiar,
no
tenéis más que dejar un comentario.

Si más, muchas gracias a todos y ya nos veremos por aquí

Un saludo

[1]
http://usandolarueda.blogspot.com/2009/01/instalar-ruby-rubygems-rails-and_17.html

El 16 de enero de 2009 13:34, Andrés gutiérrez
removed_email_address@domain.invalidescribió:


#15

Manuel si vuelvo a reabrir este hilo, me dices donde quedamos y dejo que
me
metas una paliza.

Ruben es estupendo que me hayas resuelto la duda, pero ¿no crees que la
vacilada del primer mensaje sobraba? Y que te ha faltado un “Lo
siento…”
No te lo tomes a mal, pero a nadie le gusta que le vacilen, y menos si
el
que te vacila NO tiene la razón.

Hola Andrés tu crees que podria ser por el orden del PATH?
/usr/local/bin:…/usr/bin:…
(Creo que hace falta una siesta)

En cuanto a tu segundo mail, mil gracias por aclararme la duda. Una
cosita
más que tengo clara. En serio gracias

Un saludo

NOTA:
Ruben: Si algo de lo que he dicho no te ha parecido bien, contestame de
forma personal. Este hilo para mi esta cerrado con candado :slight_smile:

2009/1/18 Ruben. D. removed_email_address@domain.invalid


#16

Habia entendido mal tu mensaje, segun el ‘man’, ‘whereis’ no usa la
variable
$PATH sino busca en directorios estandares:

DESCRIPTION
whereis locates source/binary and manuals sections for
specified
files. The supplied names are first stripped of
leading pathname components and any (single) trailing extension
of
the form .ext, for example, .c. Prefixes of s.
resulting from use of source code control are also dealt with.
whereis then attempts to locate the desired program
in a list of standard Linux places.

Aqui explican algo del tema: http://tinyurl.com/8mcn7x

Y de acuerdo a lo que he experimentado siempre se va a respetar el
$PATH,
asi que no hay que preocuparse:

[rdavila@scooby:~]$ echo $PATH
/home/rdavila/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
[rdavila@scooby:~]$ /usr/bin/ruby -v
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]
[rdavila@scooby:~]$ /usr/local/bin/ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]
[rdavila@scooby:~]$ ruby -v
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]

Ahora si me voy antes que venga el niño Manuelito :wink:

Saludos.