Bash, ¿siempre verificas $ PWD como parte del camino?

15

Antecedentes: uno de mis colegas que no proviene de Linux me preguntó acerca del uso ./antes de algunos comandos y no de otros, así que le expliqué cómo PATHfunciona y cómo se eligen los binarios para ejecutarlos. Su respuesta fue que era tonto y solo quería no tener que escribir ./antes de los comandos.

Pregunta: ¿Hay alguna forma de modificar fácilmente el comportamiento del shell de modo que $PWDsiempre sea el primer elemento PATH?

Christophe
fuente
Puede ser tonto (o no), pero cada entorno tiene sus peculiaridades, y esta es una peculiaridad típica de shell de Unix.
RonJohn
12
Es una medida de seguridad. Los shells solían hacer esto de manera predeterminada (piense en la década de 1970), y los sistemas multiusuario fueron ampliamente atacados por ello.
Charles Duffy
3
Su respuesta fue que era tonto : dicho colega debe educarse sobre este tema. Esa respuesta espontánea demuestra una respuesta de estilo PHB : sin comprensión ni apreciación del sistema subyacente.
Nube
2
¿Por qué no simplemente colocar los archivos binarios ~/biny hacerlos parte PATH? Esto también mantiene las cosas organizadas.
Sergiy Kolodyazhnyy
3
@Ziazis en Windows, el directorio actual se considera independientemente de si es parte PATH(que es la fuente habitual de tales consideraciones).
Stephen Kitt

Respuestas:

55

Si realmente quieres, puedes hacerlo anteponiendo .a tu camino:

export PATH=".:$PATH"

Sin embargo, esa es una mala idea, porque significa que su shell seleccionará cualquier comando en el directorio actual con preferencia a otros. Si alguien (o algún programa) suelta un lscomando malicioso en un directorio que usa con frecuencia, tiene problemas ...

Stephen Kitt
fuente
13
Este es un punto excelente, aunque quizás sea suficiente para mover el. al final de la ruta y luego exportar PATH = "$ PATH :."
Christophe
12
De hecho, recuerdo que .al principio tuyo PATHera el predeterminado para los usuarios normales (si creé el usuario con "sam" en HP-UX, al menos; no estoy seguro acerca del viejo SunOS). Más tarde, este valor predeterminado se eliminó por razones de seguridad. Si tiene el .último elemento de su PATH, todavía alguien puede esperar errores tipográficos típicos.
Philippos
66
@Philippos, sí, como los infames /tmp/slscripts de broma para apuntar a los usuarios con tales PATHs. En Debian y derivados, instale el slpaquete para tener una idea de con qué frecuencia escribe slen lugar de ls.
Stéphane Chazelas
No, no es una mala idea, es buena, especialmente si eres desarrollador. Por supuesto, mantener un entorno donde nadie deje caer comandos maliciosos es otra buena idea.
jamesqf
44
@jamesqf, en realidad, es una buena idea escribir ./cuando desea llamar a comandos en el directorio actual. O bien, si el directorio actual es de costumbre /project/under/development/bin, a continuación, añadir que a su PATH. Esto resuelve el caso de uso de su desarrollador. Poner .al comienzo de tu PATHes una mala idea, punto.
Comodín el
14

Aunque esta no es una respuesta directa a su pregunta, la mejor práctica sería crear un bindirectorio en su directorio personal como /home/user/bin:

mkdir -p "$HOME/bin"
echo 'PATH="$HOME/bin:$PATH"' >> "$HOME/.bashrc"
source "$HOME/.bashrc"

Ponga sus guiones personales allí. Se PATHrecorrerán en el orden en que lo defina y ejecute sus scripts personales sin la .necesidad.

Valentin Bajrami
fuente
0

Necesitas tener el. al comienzo de su variable PATH:

export PATH=".:$PATH"
Gurú
fuente