Je me demande pourquoi cd
ne fonctionne pas dans le script Shell. C'est comme suit,
#!/bin/sh
cd test
mkdir $(date +%d-%mm-%Y)
Lorsque je lance ceci, je ne peux pas tester le CD
cd: 2: can't cd to /test
Pourquoi est-ce comme ça?
J'ai eu le même problème. Il s'est avéré que le problème était\r\n des fins de ligne.
Pour le réparer, faites
tr -d "\r" < oldname.sh > newname.sh
De http://talk.maemo.org/showthread.php?s=1cadd53b369d5408c2b9d53580a32dc4&t=67836&page=2
Pas vraiment pertinent pour cette question. J'ai eu le même message d'erreur, cependant, j'utilisais
cd ~/foo/bar
Après avoir changé cela en
cd $HOME/foo/bar
il a été corrigé.
mettez pwd
comme première ligne. Vérifiez ensuite si ce répertoire possède un sous-répertoire de test.
Il ressemble à son exécution à partir du répertoire racine
J'ai eu ce problème et j'ai été très confus pendant un certain temps.
Il s'avère que j'avais réglé mon $CDPATH
variable d'environnement, qui permet normalement aux commandes cd
normales de fonctionner comme d'habitude. Cependant, j'exécutais mon script en mode non interactif, comme "sh" (pas "bash"), où le comportement est un peu différent. Il semble qu'une commande comme:
cd subdir # works via interactive bash; not in script run via sh.
fonctionnera comme prévu dans mon shell de connexion interactive, bash, même lorsque CDPATH
est défini. Cependant, lorsque j'exécute la commande identique dans un script (en utilisant sh
), elle échoue avec
myscript.sh: line 9: cd: subdir: No such file or directory
Je l'ai modifié pour être un chemin relatif:
cd ./subdir
et il fonctionne! Je pense que la différence réside dans la façon dont Shell utilise CDPATH
. Dans un cas, il recherche à la fois CDPATH
et votre répertoire actuel, mais dans le script, il niquement recherche CDPATH
. Ceci est similaire au comportement de PATH
. Si tu pars .
(le répertoire courant) de votre PATH
, alors vous devez taper ./localbinary
au lieu de simplement localbinary
pour exécuter ce fichier.
Ceci est ma supposition éclairée. Lorsque je mets/décompresse CDPATH
, cela rompt/brise le cd subdir
commande et cd ./subdir
fonctionne dans tous les cas pour moi.
La réponse de Benito Ciaro est sur le point. Je voudrais juste ajouter une autre méthode que vous pouvez utiliser pour supprimer \r\n
fins de ligne. Ouvrez le script dans l'éditeur de texte Sublime et dans le menu
Aller à Affichage → Fin de ligne → Unix
Cela supprimera le caractère "\ r" de votre script. N'oubliez pas de sauvegarder votre fichier.
Eh bien, je l'ai fait fonctionner en utilisant ""
Donc dans votre cas ce serait:
cd "test"
/ Marcus
Cela dépend d'où le script est exécuté, si le script est dans votre $ PATH, alors il sera basé sur le répertoire courant à partir duquel vous avez donné la commande (répertoire de travail).
S'il s'agit d'un script exécuté en tant que tâche cron, il est préférable d'utiliser un chemin de répertoire complet.
Exemple:
cd/home/utilisateur/test
Donner le chemin complet fonctionnera également si le script est dans votre $ PATH.
2
est l'errno pour "Aucun fichier ou répertoire de ce type". Êtes-vous sûr que le script test
existe dans le répertoire de travail du script?
Vous voudrez peut-être cd
dans un répertoire conn "bon" en premier puis dans les répertoires enfants conn de ce bon répertoire.
J'ai fait face au même problème dans Ubuntu. Ma commande Shell est:
$ export DIR=mydir
puis exécutez un fichier script qui contient:
#!/bin/sh
cd ~/$DIR
donnant une sortie:
cd: 2: can't cd to ~/mydir
en essayant de nombreuses options, à la fin cela ne peut être résolu que comme ceci:
#!/bin/sh
WORKDIR=~/$DIR
cd "$WORKDIR"
Ne devriez-vous pas utiliser
cd /test
au lieu? Je ne connais pas les scripts Shell, mais je peux voir que votre script particulier est sensible au répertoire actuel.