Soy nuevo en el uso de Cygwin, así que me disculpo si esta es una pregunta muy nueva.
Tengo un script bash donde "cd" a un directorio y luego hago algo en ese directorio. Sin embargo, el comando cd falla con "No existe dicho archivo o directorio / c / code / blah / blah".
Si copio la línea de CD directamente en el indicador de comandos de shell, entonces funciona bien. Simplemente falla en el guión.
[editar] Según lo solicitado, agregué las líneas reales del script:
#!/bin/bash
cd /c/Code/Project
Gracias por cualquier ayuda con esto,
Dan.
Respuestas:
¿Qué tipo de terminaciones de línea tiene su script? Para que el script de Cygwin bash funcione correctamente (sin tener que establecer opciones especiales), debe tener terminaciones de línea Unix (LF) en lugar de terminaciones de línea DOS (CR-LF). Si guardó el script con terminaciones de línea de DOS, bash verá su argumento
cd
como/c/Code/Project^M
, donde^M
hay un CR, y no encontrará un directorio con ese nombre.Para ver qué tipo de terminaciones de línea tiene, puede ejecutar
file scriptname
, donde scriptname es el nombre de su script. Para convertir el script de modo que tenga terminaciones de línea Unix, ejecuted2u scriptname
.No use el Bloc de notas para editar scripts de Cygwin bash. Siempre guarda archivos con terminaciones de línea de DOS.
fuente
:help ff
y:help ffs
.A menos que anule, un script se ejecuta en su propia copia del shell (generalmente Bash). Luego, cuando sale el script, también sale esa instancia de bash. Por lo tanto, sus CDs de script en un nuevo directorio y luego salen, regresando al Bash original, que nunca hizo un CD.
Dos formas de solucionarlo. Puede usar un alias en lugar de un script, por ejemplo, en su .profile tiene
Otra forma es decirle a Bash que no genere una subshell utilizando la sintaxis "dot"
fuente
Puede encontrar sus archivos en / cygdrive / c ...
fuente
Tratar:
cd /cygdrive/c/code/blah/blah
fuente
'cd c:/code/blah/blah
'no para'cd /c/code/blah/blah
'. Además, la forma 'c:
' también funciona desde un script; Aquí falta algo más, la pregunta necesita más elaboración.No tengo reputación para comentar o votar, pero la respuesta de CarlF me ayudó.
"De modo que el CD de la secuencia de comandos se inserta en un nuevo directorio y luego sale, regresando al Bash original, que nunca hizo un CD".
El mismo script, pero en mi caso, no hay mensaje de error.
Esto funcionó para mí:
. myscript.sh
fuente