я должен был бы создать тест, чтобы быть уверенным, но вы никогда не установить значение для $dir1
, вы только перенаправить ls
в файл с именем dir1
.
Так как насчет
#! /bin/sh
if [ $# -ne 2 ]
then
echo "Invalid argument count."
echo "Usage: $0 <dir1> <dir2>"
exit
fi
ls $1 >> dir1
for file in $2/*
do
grep $file dir1
done
rm dir1
Когда я получаю сценарий, который просто висит без очевидных, ожидаемых результатов. Я убью его, а затем добавлю функции отладки оболочки сценарию.
либо в верхней части, как
#!/bin/sh -vx
Или в любое abitrary место в сценарии, где я подозреваю проблему или на второй линии, то есть
set -vx
ИЛИ если я довольно конечно, где проблема, и выше производят много материала для прокрутки, затем я изолирую подозрительные линии, включаю и выключая отключение, т.е.
set -vx
suspect_code
set +vx
Наконец, я думаю, ваша проблема может быть сведена к
ls $1 >> dir1
ls $2/* | fgrep -f dir1
Это имеет ограничения, если ваши файлы/каталоги имеют пробелы, CRS или другие неприятные вещи внедренные. Если у вас есть хорошие чистые имена файлов, он должен работать.
Надеюсь, это поможет.
Простите, я не имел никакого значения в вашем скрипте и моем. Что добавление/модификация вы сделали? –
Я удалил '$' из строки 'grep $ file dir1'. Я собираюсь сделать еще один комментарий, поэтому загляните за минуту. Удачи. – shellter
Что такое 'v' for? (Я знаю, что 'x' для отладки). Кроме того, какая разница между 'grep $ file $ dir1' и' grep $ file dir1'? –