4 votos

PATH=$PATH:`pwd` - ¿Qué sucede cuando se ejecuta este comando?

¿Qué sucede cuando se ejecuta este comando?

PATH =$PATH:`pwd`

Error: no sucede Nada cuando ejecuto el comando en el terminal.

15voto

Stewart Puntos 1385

Si ejecuta el comando en su pregunta, usted debe recibir un mensaje de error:

$ PATH =$PATH:`pwd`
bash: PATH: command not found

Si el espacio es un error tipográfico, y de ejecutar esto:

PATH=$PATH:`pwd`

Después de que se agregue el directorio actual (pwd es un comando que imprime la ruta del directorio actual, y `pwd` será reemplazado con la salida de pwd) a la PATH variable para la duración de su sesión actual de la shell (util de cerrar el terminal). Para ilustrar:

$ pwd
/home/terdon/foo  ## I am in /home/terdon/foo

$ echo $PATH ## the current PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

$ PATH=$PATH:`pwd`
$ echo $PATH
/home/terdon/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/terdon/foo

Nota cómo el directorio actual, /home/terdon/foo ha sido añadido a la final de la PATH variable.

2voto

Serg Puntos 17677

El error

En cuanto a tu comando original va, terdon la respuesta ya que cubre muy bien lo que está sucediendo y lo que debería suceder. Vamos a analizar un poco más en detalle.

Lo que estamos tratando de hacer es variable de asignación, lo que debería adoptar la forma de:

varName=value

Sin embargo, debido a que el espacio esta es tratada como un comando PATH con el argumento de línea de comandos que consta de un = , a continuación, el contenido de la variable $PATH y el comando de sustitución de pwd, todos se unieron a la misma cadena:

PATH =$PATH:`pwd`

Por supuesto, no existe tal comando como PATH, por lo tanto, usted obtendrá un error.

Shell trata de simples comandos y sus argumentos, como la lista de uno o más separadas por espacio de tokens (con quizás opcional asignación de variable antes de eso). En otras palabras, el formulario debe ser:

[VAR=value] word [arg1 [arg2 [arg3] ]...]

Por supuesto, esto no es lo que se desea, en este caso.

El comando adecuado

Entonces, ¿qué debería haber hecho es este:

PATH=$PATH:`pwd`    

Aquí tenemos la correcta asignación de variable, donde de acuerdo con la orden de ampliación, bash shell en primer lugar, realizar la expansión de la variable, es decir, reemplazar $PATH con lo que tengas en esa variable en la actualidad, a continuación, llevar a cabo el comando de sustitución de por donde discurre pwd y la reemplaza con la salida de pwd. En el final, todo lo que vuelve a asignar a PATH variable.

Un par de observaciones fundamentales:

  • Ya que esta es la variable de asignación, no es necesario citar $PATH variable, pero por lo general usted debe evitar comportamientos no deseados. A ver Cuando es el Doble de Cotización Necesario
  • comillas simples inclinadas forma de comando de sustituciones es que no se recomienda en la actualidad. En este caso en particular, es OK, pero en general comillas simples inclinadas no se prestan muy bien para la anidación y multi-línea de comandos.
  • PATH variable es utilizada por shell para encontrar los comandos, y el orden de los directorios en esa lista, se establece la prioridad de donde comandos sería buscado. Así, por ejemplo, cuando se ejecuta un comando de la shell primero comprobar si el comando built-in, si no lo es, se vería a través de todos los directorios en la PATH variable. El PATH=$PATH:$(pwd) haría shell recorrer todo lo demás, y sólo a continuación, obtener el directorio en el que fue dado por pwd. Por el contrario, PATH=$(pwd):$PATH sería iniciar la búsqueda desde el directorio devuelto por pwd primera. Así que el fin de la asignación de materias.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: