2012-05-31 38 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 

當我得到一個腳本,只是沒有明顯的,預期產出掛。我殺了它,然後將shell調試功能添加到腳本中。

無論是在頂部,像

#!/bin/sh -vx 

或者說,在我懷疑有問題或在第二行腳本任何abitrary地方,即

set -vx 

或者如果我敢確定問題出在哪裏,並且上面產生了很多東西來滾動,然後我隔離可疑線路,打開和關閉調試,即

set -vx 
suspect_code 
set +vx 

最後,我認爲你的問題可以降低到

ls $1 >> dir1 
ls $2/* | fgrep -f dir1 

如果你的文件/顯示目錄有空格,CR的或其他討厭的東西嵌入此有一定的侷限性。如果你有很好的乾淨的文件名,它應該工作。

我希望這會有所幫助。

+0

對不起,我的腳本和我的沒有什麼區別。你做了什麼增加/修改? –

+0

我從'grep $ file dir1'行刪除'$'。我要再發表一條評論,請稍後再回來查看。祝你好運。 – shellter

+0

v是什麼? (我知道'x'是用於調試的)。另外,'grep $ file $ dir1'和'grep $ file dir1'有什麼區別? –

1

$ dir1沒有定義,所以grep只有一個參數,並在標準輸入中搜索$文件。所以grep正在等待輸入,它會一直等待。

相關問題