Je suis nouveau dans l'utilisation de Cygwin, donc veuillez m'excuser s'il s'agit d'une question très novice.
J'ai un script bash où je "cd" dans un répertoire puis fais quelque chose dans ce répertoire. Cependant, la commande cd échoue avec "Aucun fichier ou répertoire / c / code / blah / blah".
Si je copie la ligne de CD directement dans l'invite du shell, cela fonctionne bien. Il échoue simplement dans le script.
[modifier] Comme demandé, j'ai ajouté les lignes réelles du script:
#!/bin/bash
cd /c/Code/Project
Merci pour toute aide à ce sujet,
Dan.
Réponses:
De quel type de fins de ligne dispose votre script? Pour que le script bash Cygwin fonctionne correctement (sans avoir à définir d'options spéciales), il doit avoir des fins de ligne Unix (LF) plutôt que des fins de ligne DOS (CR-LF). Si vous avez enregistré le script avec des fins de ligne DOS, bash verra votre argument
cd
comme as/c/Code/Project^M
, où^M
est un CR et ne trouvera pas de répertoire de ce nom.Pour voir quel type de fins de ligne il a, vous pouvez l'exécuter
file scriptname
, où scriptname est le nom de votre script. Pour convertir le script afin qu'il ait des fins de ligne Unix, exécutezd2u scriptname
.N'utilisez pas le Bloc-notes pour modifier les scripts bash Cygwin. Il enregistre toujours les fichiers avec des fins de ligne DOS.
la source
:help ff
et:help ffs
.Sauf si vous remplacez, un script s'exécute dans sa propre copie du shell (généralement Bash). Ensuite, lorsque le script se termine, cette instance de bash se ferme également. Donc, vos CD de script dans un nouveau répertoire, puis se termine, vous ramenant au Bash d'origine - qui n'a jamais fait de CD.
Deux façons de contourner ce problème. Vous pouvez utiliser un alias au lieu d'un script, par exemple dans votre .profile have
Une autre façon est de dire à Bash de ne pas générer de sous-shell en utilisant la syntaxe "dot"
la source
Vous pourriez trouver vos fichiers dans / cygdrive / c ...
la source
Essayer:
cd /cygdrive/c/code/blah/blah
la source
'cd c:/code/blah/blah
«pas pour'cd /c/code/blah/blah
». De plus, lec:
formulaire ' ' fonctionne également à partir d'un script; Il manque autre chose ici, la question a besoin de plus de détails.Je n'ai pas la réputation de commenter ou de voter, mais la réponse de CarlF m'a aidé.
"Donc, vos CD de script dans un nouveau répertoire, puis se termine, vous ramenant au Bash d'origine - qui n'a jamais fait de CD."
Même script, mais dans mon cas, pas de message d'erreur.
Cela a fonctionné pour moi:
. myscript.sh
la source