2013-10-09 13 views
5

この質問は何度も尋ねられましたが、まだ解決策が見つかりませんでした。だから、誰かが助けることができるなら、それをもう一度尋ねる!シェルスクリプトで変数が変更されたディレクトリ

私は変数の助けを借りてシェルスクリプトの中で自分の作業ディレクトリを変更しようとしています。しかし、毎回" 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

変数には改行が含まれています。次のように試してみてください:

とする必要があります。変数から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 \' echo $ RED_INSTANCE_NAME | tr -d '\ r' \ '' –

5

はパスがcdコマンドが実行され、現在のディレクトリに理にかなっていることを確認し、また

cd "$RED_INSTANCE_NAME" 

を試してみてください。

+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だけで非表示にしたり、無視するすべての文字が表示されます。

特に、エラーメッセージがbash: cd: yourdir: No such file or directoryではなく: 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 
関連する問題