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é.