2013-02-21 53 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

相关问题