2013-02-21 111 views
0

這是此處發佈的問題的後續操作Shell script to execute nohup against an inputed filenameshell腳本來禁用目錄中的每個文件

我只是試圖找到修改下面的no_hup腳本來執行一個完整的SQL腳本目錄而不是一個單一的文件。因此,我試圖找到修改下面的腳本EXCUTE對文件的整個目錄的好辦法:

我怎樣寫一個shell腳本,這樣我可以對包含該文件的目錄名爲試運行foo1.sql,foo2.sql,foo3.sql

./nohup_sh測試

這將產生輸出中

nohup的PSQL -d分貝-f測試/ foo1.sql> &測試/ foo1。 out &

nohup的PSQL -d分貝-f測試/ foo2.sql> &測試/ foo2.out &

nohup的PSQL -d分貝-f測試/ foo3.sql> &測試/ foo3.out &

這是我已經從所謂的nohup_sh

#!/bin/bash 

outputFile="$(echo $1 | cut -d\. -f 1).out" 

nohup psql -d db -f "$1" >& "$outputFile" & 

回答

5
#!/bin/bash 

for file; do 
    nohup psql -d db -f "$file" >& "${file%.*}.out" & 
done 

以前的答案使用的代碼是bash parameter expansion執行相同,您cut 命令,而是bash builtin

for filefor file in "[email protected]"

使用的縮寫:

./script.bash sql_dir/*.sql 

./script.bash *.sql 
+0

'$ {file%。*}'**不是**與cut -d相同。 -f 1'。是和'awk -v FS =相同。 -v OFS =。 'NF - ''(這只是最後一個字段)。對該文件在$(find $ 1/-name「* .sql」)中的$ {file %%。*}' – 2014-08-29 13:43:14

1

以下腳本搜索任何*.sql目錄中的文件作爲參數傳遞並執行所需的nohup命令。找到的文件名由空字節分隔以避免文件名中的空格或通配符出現問題。

#!/bin/bash 
if [[ -d "$1" ]]; then 
    find "$1/" -type f -name "*.sql" -print0 | while read -rd $'\0' file; do 
     nohup psql -d db -f "$file" >& "${file%.*}.out" & 
    done 
else 
    echo "$1 is no directory" 
    exit 1 
fi 
exit 0 

叫它像script.sh somedir

+0

'是一個錯誤:腳本不處理文件空格在文件名 – 2013-02-21 21:44:19

+0

@sputnick感謝您的評論,現在應該修復。 – speakr 2013-02-21 22:14:53

相關問題