0

2 つのディレクトリ パスを含むファイルがあります (さらに多くのパスが含まれます)。各行を読み込んでから、各行で実行したいls。かなり単純ですよね?

問題は、それが機能していないことであり、その理由はわかりません。私が何をしても、最後の行は常にls. 前の行は、存在していても、 には「存在しません」 ls

ファイル.リスト

/path/to/directory1/
/path/to/directory2/
/path/to/directory1/
/path/to/directory2/

次のスニペットを実行すると

DIRECTORIES="file.list"
for DIR2 in `cat $DIRECTORIES`
do
       echo $DIR2
       ls $DIR2
done

出力として次を取得します

/path/to/directory1/
 does not exist. file /path/to/directory1/
/path/to/directory2/
 does not exist. file /path/to/directory2/
/path/to/directory1/
 does not exist. file /path/to/directory1/
/path/to/directory2/
Server

それの何が問題なのですか?他のより良い解決策はありますか?

ありがとう

編集:奇妙なことに、別のUnixボックスで試してみたところ、問題なく動作しました

4

3 に答える 3

2

$DIR2 に行末が含まれている可能性がありますか? それらを削除してみてください:

DIR2=`echo $DIR2 | tr -d '\r'`

投稿されたログが私にとって非常に奇妙に見えるので、そう思います。ls私のPCでのコマンドの出力は次のようになります。

ls: cannot access /path/to/directory1/: No such file or directory

しかし、あなたのもの:

 does not exist. file /path/to/directory1/
于 2012-05-15T21:24:28.927 に答える
1

cat邪悪なプログラムです、最善はそれを使用しないことです。ファイルを1行ずつ読み取る必要がありますcat。出力は行バッファリングされません。

while read path ; do
    ls $path
done <file.list
于 2012-05-15T21:57:17.537 に答える
0

JGeZau、

スクリプトは正常に見えます。パスを絶対/相対で正しく参照していることを確認しましたか?

スクリプトを bash にコピーしましたが、まったく問題はありませんでした。

test.sh:

#!/bin/bash
DIRECTORIES="paths"
for DIR2 in `cat $DIRECTORIES`
do
   echo $DIR2
   ls $DIR2
done

パス:

/var/logs/
/var/tmp/

出力:

./test.sh

/var/logs/
file1.log file2.log 

/var/tmp/
tmp1 tmp2 tmp3

これが役立つことを願っています。

于 2012-05-15T21:14:35.777 に答える