2012-05-31 2 views
0
#! /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 

Я написал сценарий выше с намерением распечатать все файлы, которые оба находятся в двух каталогах, чьи имена передаются скриптам в качестве аргументов.Почему мой сценарий работает навсегда?

Но когда я запускал сценарий, это требовалось навсегда. (Никогда не закончил, на самом деле!)

Кто-нибудь знает, что я сделал не так?

Благодаря

ответ

0

я должен был бы создать тест, чтобы быть уверенным, но вы никогда не установить значение для $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 или другие неприятные вещи внедренные. Если у вас есть хорошие чистые имена файлов, он должен работать.

Надеюсь, это поможет.

+0

Простите, я не имел никакого значения в вашем скрипте и моем. Что добавление/модификация вы сделали? –

+0

Я удалил '$' из строки 'grep $ file dir1'. Я собираюсь сделать еще один комментарий, поэтому загляните за минуту. Удачи. – shellter

+0

Что такое 'v' for? (Я знаю, что 'x' для отладки). Кроме того, какая разница между 'grep $ file $ dir1' и' grep $ file dir1'? –

1

$ dir1 не определен, поэтому grep имеет только один аргумент и ищет $ file в стандартном вводе. Поэтому grep ждет ввода, и он будет ждать всегда.

Смежные вопросы