2013-12-08 290 views
0

我是bash中的新手。我有兩個腳本 - script1覆蓋一個目錄,其中的每個文件都在該文件上執行script2。從嵌套腳本bash回顯文件

SCRIPT1:

#!/bin/bash 
for file in $(find ../myFiles/ -type f); do 
    $(cat $file | ./script2) >> res.txt 
done 

SCRIPT2:

while read line; 
do ... 
    .... 
    echo "$line" 
done 

然而在SCRIPT2的echo "$line"不工作,我想它(到res.txt文件),但它outputed作爲命令,導致錯誤(「找不到命令」)

有人知道如何做到這一點嗎? 謝謝。

+0

嘗試 - '回聲$ line'沒有雙引號。同樣在script1中,'$(cat ..')行是否工作?您需要像'\'cat $ file | ./script2 \'>> res.txt' – Hussain

回答

1

$(foo)執行命令foo的結果,完全如您所述。做:

./script2 < "$file" >> res.txt 

有沒有必要創建一個管道和運行的東西是什麼bash做什麼。 「echo」是外部命令。所以是「[」(如:if [ thing ]),但實際上bash在內部處理這些內容。儘管如此,您仍然可以將[作爲獨立程序運行。類型:which [來看看。

編輯:的情況下,這是不夠清楚:

#!/bin/bash 
for file in $(find ../myFiles/ -type f); do 
    ./script2 < "$file" >> res.txt 
done 
0

任務是更容易,如果你用的功能來解決:

#!/bin/bash                  

search_path='.'                 

### declare functions ###               
function foo {                 
    for file in `find $search_path -type f`           
    do                    
    echo 'processing: '$file              
    process_file $file               
    done                   
}                     

function process_file {               
    while read line                 
    do                    
    echo $line                 
    done < $file                 
}                     

### call your main function ###             
foo 

它更易於閱讀,並修改以防您稍後需要額外的功能。 一個腳本也足夠了。

(A涼爽的是,因爲它是,該腳本將打印本身。)

0

$(...)用於命令替換。考慮以下腳本:

SCRIPT1:

#!/bin/bash 
while read file; do 
    ./script2 "$file" >> res.txt 
done < <(find . -name "file" -type f) 

SCRIPT2:

#!/bin/bash 
while read line; do 
    echo "$line" 
done < "$1"