2016-08-31 1 views
0

パスが存在するかどうかを確認しようとしています。パスはテキストファイルパスのあるファイルを読み込み、それらが存在するかどうか確認する際に問題がある

これはテキストファイルであるである:

/cygdrive/c/scriptstest/test1 

/cygdrive/c/scriptstest/test2 

/cygdrive/c/scriptstest/test3 

/cygdrive/c/scriptstest/test4 

経路test1test2test3が存在します。

私のコードは

while read -r line; 
do 
    echo $line 
    if [ -d $line ]; then 
     echo "Exist" 
    else 
     echo "No exist" 
    fi 
done < test2.txt 

されており、ここで問題です:

/cygdrive/c/scriptstest/test1 
No exist 

/cygdrive/c/scriptstest/test2 
No exist 

/cygdrive/c/scriptstest/test3 
No exist 

/cygdrive/c/scriptstest/test4 
No exist 

結果は常に否定しているが、私はコピーして、パスがコードに直接貼り付けると、結果はOKです:

#if [ -d "/cygdrive/c/scriptstest/test1" ]; --> using the path direct in the code 
output 
/cygdrive/c/scriptstest/test1 
Exist 

なぜこのスクリプトでは機能しないのですか?

+1

このような行に引用符を入れようとしましたか? 'if [-d" $ line "]'自分のコンピュータ上で自分のコードを試してみました。 – Matthias

+1

正しいディレクトリにコードを実行していることを確認していますか? '-d'はディレクトリであるかどうかをチェックし、ファイルではないことを知っていますか? (そのために '-f'を使います) – Matthias

+0

はい私は引用符を使ってみました。あなたは他のものを変更していませんか?はい私はusinbg -dです。フォルダが存在するかどうかを確認する必要があります。ありがとう –

答えて

1

問題はpaths.txtファイルでした。それはDOSの行末で保存されていたので、私は実際にキャリッジリターンで終わるディレクトリ名をテストしていました。それは印刷時に明らかではありませんでした(echo $lineの代わりにprintf '%q\n' "$line"でより明白になるはずです)。

キャリッジリターンを行末から削除すると問題が解決しました。

+0

あなたは何が間違っていたのを見つけてうれしいです。あなた自身の答えを受け入れる必要があります:) – Matthias

関連する問題