这是对此处发布的问题的跟进Shell script to execute nohup against an inputed filename。
我只是想找到修改下面的no_hup脚本来执行SQL脚本的整个目录而不是单个文件。所以我试图找到一种好方法来修改下面的脚本来执行整个文件目录:
如何编写shell脚本以便我可以针对名为test的目录运行,该目录包含文件foo1.sql,foo2.sql,foo3.sql
./ nohup_sh test
将产生输出
nohup psql -d db -f test / foo1.sql>& test / foo1.out&
nohup psql -d db -f test / foo2.sql>& test / foo2.out&
nohup psql -d db -f test / foo3.sql>& test / foo3.out&
这是我在上一个名为nohup_sh
的答案中使用的代码#!/bin/bash
outputFile="$(echo $1 | cut -d\. -f 1).out"
nohup psql -d db -f "$1" >& "$outputFile" &
答案 0 :(得分:5)
#!/bin/bash
for file; do
nohup psql -d db -f "$file" >& "${file%.*}.out" &
done
${file%.*}
bash parameter expansion与cut
的效果相同
命令,但bash builtin
for file
是for file in "$@"
用法:
./script.bash sql_dir/*.sql
或
./script.bash *.sql
答案 1 :(得分: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
。