我知道这个问题已经被问了很多次了,但是我还是找不到任何好的解决办法。 因此,再问一次,如果有人可以帮助!
我想借助一个variables来改变我的工作目录在一个shell脚本里面。 但是我每次都得到" No such file or directory"
。
#!/bin/bash echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name cd $RED_INSTANCE_NAME <-- This line gives the error
现在,当我尝试给实际的目录名称而不是使用variables时,shell更改目录没有问题
cd test <-- No error
有谁知道这里可能是什么问题? 请帮忙 !!
你的变量包含一个回车。 试着说:
cd $(echo $RED_INSTANCE_NAME | tr -d '\r')
它应该工作。 为了从变量中删除CR,你可以这样说:
RED_INSTANCE_NAME=$(echo $RED_INSTANCE_NAME | tr -d '\r')
以下将说明这个问题:
$ 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
尝试
cd "$RED_INSTANCE_NAME"
另外,请确保路径对执行cd
命令的当前目录有意义。
遇到你所描述的问题的一种方法是在变量名中加一个波浪号( ~
)。 改用绝对路径或$HOME
变量。 请注意,使用$HOME
将需要双引号。
# doesn't work $ vartilde='~/' $ cd $vartilde -bash: cd: ~: No such file or directory # works $ varfullpath='/Users/recurvirostridae' $ cd $varfullpath # works $ varwithhome="$HOME" $ cd $varwithhome
我不知道你怎么了,但我可以提供一个一般的建议:
cd "$RED_INSTANCE_NAME" # Quote the string in case it has spaces.error
你几乎总是把“$ VARIABLE”放在引号中。 当变量的值包含有趣的东西(如空格)时,这将防止意外。
你可以检查回车符,ANSI转义符和其他特殊字符
cat -v <<< "$RED_INSTANCE_NAME"
这将显示echo $RED_INSTANCE_NAME
只会隐藏或忽略的所有字符。
特别是,如果你的错误信息是: No such file or directory
,而不是bash: cd: yourdir: No such file or directory
,这意味着你有一个回车在变量的末尾,可能是从DOS读取它格式化的文件。