Répertoire de modification du script shell avec variable

Je sais que cette question a été posée à plusieurs resockets, mais je n’ai toujours pas trouvé de solution satisfaisante. Par conséquent, demander à nouveau si quelqu’un peut aider!

J’essaie de changer un répertoire de travail dans un script shell à l’aide d’une variable. Mais je reçois " No such file or directory" chaque fois.

 #!/bin/bash echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name cd $RED_INSTANCE_NAME <-- This line gives the error 

Maintenant, quand j’essaie de donner le nom du répertoire au lieu d’utiliser la variable, shell change le répertoire sans problèmes

 cd test <-- No error 

Est-ce que quelqu’un sait ce qui peut être le problème ici? S’il vous plaît aider!

Votre variable contient un retour chariot. Essayez de dire:

 cd $(echo $RED_INSTANCE_NAME | tr -d '\r') 

et ça devrait marcher. Pour supprimer le CR de la variable, vous pouvez dire:

 RED_INSTANCE_NAME=$(echo $RED_INSTANCE_NAME | tr -d '\r') 

Ce qui suit illustrerait le problème:

 $ mkdir abc $ foo=abc$'\r' $ echo "${foo}" abc $ cd "${foo}" : No such file or directory $ echo $foo | od -x 0000000 6261 0d63 000a 0000005 $ echo $foo | tr -d '\r' | od -x 0000000 6261 0a63 0000004 $ echo $'\r' | od -x 0000000 0a0d 0000002 

Essayer

 cd "$RED_INSTANCE_NAME" 

De plus, assurez-vous que le chemin est logique dans le répertoire actuel où la commande cd est exécutée.

Une des façons de résoudre votre problème est d’avoir un tilde ( ~ ) dans le nom de la variable. Utilisez plutôt le chemin absolu ou la variable $HOME . Notez que l’utilisation de $HOME nécessite des guillemets doubles.

 # doesn't work $ vartilde='~/' $ cd $vartilde -bash: cd: ~: No such file or directory # works $ varfullpath='/Users/recurvirossortingdae' $ cd $varfullpath # works $ varwithhome="$HOME" $ cd $varwithhome 

Je ne sais pas ce qui ne va pas pour vous, mais je peux vous donner un conseil général:

 cd "$RED_INSTANCE_NAME" # Quote the ssortingng in case it has spaces.error 

Vous devriez presque toujours mettre le “$ VARIABLE” entre guillemets. Cela protègera des sursockets lorsque la valeur de la variable contient des choses amusantes (comme des espaces).

Vous pouvez vérifier les retours de chariot, les échappements ANSI et autres caractères spéciaux avec

 cat -v <<< "$RED_INSTANCE_NAME" 

Cela montrera tous les caractères que echo $RED_INSTANCE_NAME cacherait ou ignorerait.

En particulier, si votre message d'erreur est : No such file or directory par opposition à bash: cd: yourdir: No such file or directory , cela signifie que vous avez un retour chariot à la fin de votre variable, probablement du DOS fichier formaté.