2013-10-09 42 views
5

我知道這個問題已經被問過很多次了,但是我仍然找不到任何好的解決方案。因此,再問一次,如果有人可以幫助!帶變量的shell腳本更改目錄

我想在一個變量的幫助下,在一個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 

現在,當我試着給實際的目錄名稱,而不是使用變量,外殼的更改,而問題

目錄
cd test <-- No error 

有誰知道有什麼可這裏的問題?請幫忙 !!

+0

你是如何設置「RED_INSTANCE_NAME」的值的? – chepner

+0

嘗試說'cd'$ {RED_INSTANCE_NAME}「' – devnull

+0

如果您認爲此問題已被問到,最好鏈接到類似的問題並解釋爲什麼答案不適合您。 –

回答

9

您的變量包含回車符。試着說:

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 
+0

感謝您的指針。我確實在變量的末尾有回車。 – Vivek

+0

或'CD \'回聲$ RED_INSTANCE_NAME | tr -d'\ r'\'' –

5

嘗試

cd "$RED_INSTANCE_NAME" 

此外,確保道路有意義的地方執行cd命令將當前目錄。

+1

謝謝回答,但我嘗試過這種方式。但沒有幫助。它仍然給出錯誤!是的,我相信,我在正確的目錄 – Vivek

+0

什麼是您所看到的錯誤執行這個命令?嘗試通過「bash -x」運行以查看它執行的內容。 –

1

我不知道是怎麼回事錯了你,但我可以提供一塊一般建議:

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

你應該幾乎始終把「$變量」在引號。當變量的值包含有趣的東西(如空格)時,這將防止意外發生。

+0

謝謝回答,但我嘗試過這種方式。但沒有幫助。它仍然給出錯誤! – Vivek

1

您可以檢查回車,ANSI逃脫並與

cat -v <<< "$RED_INSTANCE_NAME" 

其他特殊字符,這將顯示echo $RED_INSTANCE_NAME只想隱藏或忽略的所有字符。

尤其是,如果您的錯誤消息是: No such file or directory而不是bash: cd: yourdir: No such file or directory,這意味着您的變量末尾有回車符,可能是從DOS格式的文件中讀取回車。

2

一種方法是有一個波浪線( ~)的變量名。改用絕對路徑或$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