¿Qué está env ls -alhaciendo el comando ?
Tuve una prueba de Linux y había una pregunta: "¿Cómo ejecutar el comando directamente, pero no su alias?"
Sabía que existe una solución como el comando de prefijo con algún símbolo especial, pero lo olvidé. Ahora sé que lo es \. (Leer de esta publicación ).
Pero también recuerdo que en algún lugar leí que para deshacernos del alias podemos prefijar un comando con env. Lo hice y parece que funciona, pero mi respuesta fue calificada como incorrecta. He leído infoy mansobre env, pero no entendía demasiado.
¿Qué está envhaciendo y exactamente env <command>sin ningún argumento en envsí mismo?

env <command>,command <command>y\<command>. En mi opinión, si alguna prueba diceenv <command>que no es válida, entonces esa prueba está rota.commandoenvque sería la única respuesta aceptable.many no entendí qué estabaenvhaciendo exactamente. Después de esta publicación, está claro y mi respuesta fue revisada (aceptada). ¡Gracias a todos!Respuestas:
Este comando
ejecuta el comando
program and argscon un entorno formado al extender el entorno actual con las variables de entorno y los valores designados porname=valueyname2=value2. Si no incluye ningún argumento comoname=value, entonces el entorno actual se pasa sin modificaciones.Lo clave que sucede con respecto a los alias es que env es un comando externo, por lo que no tiene "conocimiento" de los alias: los alias son una construcción de shell que no son parte del modelo de proceso normal y no tienen impacto en los programas que son directamente ejecutado por programas que no son de shell (como env ). env simplemente pasa el
program and argumentsa una llamada ejecutiva (como execvp , que buscará la RUTAprogram).Básicamente, usar env de esta manera es una forma (en su mayoría) independiente de shell de evitar alias, funciones de shell, comandos incorporados de shell y cualquier otro bit de funcionalidad de shell que pueda reemplazar o anular los argumentos de posición de comando (es decir, nombres de programas), a menos que, ¡por supuesto,
enves un alias o función de shell! Si le preocupaenvser un alias, puede explicar la ruta completa (por ejemplo/usr/bin/env, aunque puede variar).fuente
Otro uso importante de
env(además de eludir la búsqueda de alias de comando) es que busca elPATHel comando. Esto es importante cuando se requieren rutas absolutas, pero varían de un sistema a otro.Por ejemplo, comenzar un script Bash con
#!/bin/bashestá bien, mientras#!bashque no lo está, a pesar de/binestar incluido enPATHtodos los sistemas razonables.Frecuentemente me encontré con esto en los programas de Python, que generalmente comienzan
#!/usr/bin/env pythonpara evitar especificar la ruta completa y dependiente del sistema delpythonejecutable (tenga en cuenta, sin embargo, que todavía requiere queenvresida/usr/bin, sin embargo, esto es mucho más común que la ubicación de la pitón binario).fuente