Sólo quiero entender siguiente línea de código en la concha. Se utiliza para ponerse en el directorio de trabajo actual. Soy consciente de que $(variable) nombre de devolver el valor en la variable nombre, pero lo que es $(command) supone volver? ¿Vuelve el valor después de ejecutar el comando? En ese caso, podemos utilizar ` para ejecutar el comando.

CWD="$(cd "$(dirname $0)"; pwd)"

Misma salida puede ser tomado de la siguiente línea de código también en otra versión de shell

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

Soy incapaz de entender el significado de $(cd.. y $(dirname.

Podría alguien ayudarme a averiguar cómo este comando se ejecuta?

InformationsquelleAutor KItis | 2013-08-01

2 Comentarios

  1. 104

    Uso de la $ como ${HOME} da el valor de la CASA. El uso de la $ como $(echo foo) significa que ejecute lo que está dentro de los paréntesis en una subshell y la devolución, que como el valor. En mi ejemplo, usted podría conseguir foo desde echo va a escribir foo salida estándar

    • lo mismo se hace » eco foo` , estoy en lo correcto ?
    • Sí; $(...) es una mejor manera de escribir un comando que tratar de usar las comillas. Considere la posibilidad de escribir: gcclib=$(dirname $(dirname $(which gcc)))/lib uso de comillas. Incluso antes de entrar en las dificultades de hacerlo en las Rebajas, es más difícil porque tienes que escapar de los acentos graves de los comandos anidados, mientras que no lo es con el $(...) notación.
    • Técnicamente, $(echo foo) crea un comando de sustitución, no una subshell. La otra corriente de respuesta recibe este derecho. Creo que la sustitución de comandos se ejecuta en un subshell, una especie de, pero todavía son conceptos diferentes.
    • la sustitución de comandos definitivamente se ejecuta en un subshell, y así vale la pena señalar que.
    • Entiendo que las comillas simples inclinadas producir el mismo resultado que $(), pero es la diferencia puramente cosmético? hay una razón para usar uno contra el otro, aparte de que el $() es más legible?
    • «el Uso de la $ como $(echo foo) significa que ejecute lo que está dentro de los paréntesis en una subshell y la devolución, que como el valor.»…Esto es confuso, ya que este comando $(echo foo) se trate de ejecutar lo que se devuelve de los paréntesis, primero se ejecutará echo foo, a continuación, intentará ejecutar foo que da un error

  2. 20
    DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

    Podría alguien ayudarme a averiguar cómo este comando se ejecuta?

    Echemos un vistazo a las diferentes partes de la orden. BASH_SOURCE es un bash variable de matriz que contiene los nombres de los archivos. Así "${BASH_SOURCE[0]}" vuelve el nombre del archivo de secuencia de comandos.

    dirname es una utilidad GNU coreutils que quitar la último componente del nombre de archivo. Por lo tanto, si se ejecuta el script diciendo bash foo, "$( dirname "${BASH_SOURCE[0]}" )" volvería .. Si usted dijo bash ../foo, desea devolver ..; para bash /some/path/foo desea devolver /some/path.

    Finalmente, el comando completo "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" obtiene la absoluta del directorio que contiene el script que se invoca.

    $(...) permite la sustitución de comandos, es decir, permite que la salida de un comando para reemplazar el comando en sí y se pueden anidar.

    • Lo siento por ser 3 años tarde a la fiesta, pero podrías por favor explicar porque la declaración de las obras? Usted dijo dirname devuelve la ruta de acceso del archivo que ejecuta (absoluta o relativa al directorio actual de trabajo), cd los cambios de la pwd a ese directorio, y pwd imprime la ruta de acceso absoluta del directorio de trabajo actual. Pero, ¿por qué están unidos por &&? Y lo que se DIR si el cd falla?
    • evita el pwd de ejecución si el cd falla, de tal manera que DIR estará vacía en lugar de tener un directorio incorrecto.

Dejar respuesta

Please enter your comment!
Please enter your name here