我正在使用gradle构建来使用以下任务在Windows和Linux上启动和停止PostgreSQL:
task startdb(type: Exec) {
workingDir 'scripts'
if (System.getProperty('os.name').toLowerCase().contains('windows')) {
commandLine 'cmd', '/c', 'startdb.cmd'
} else {
commandLine './startdb.sh'
}
}
我的startdb.cmd
内容:
call init.cmd
pg_ctl start -l ../log/startdblog
我的startdb.sh
内容:
#!/bin/bash
source init.sh
pg_ctl status
if [ "$?" -gt "0" ]; then
echo "Starting Database......."
pg_ctl start -l ../log/startdblog
else
echo "Database Already Running"
fi
但是当我在Windows数据库上执行此任务时启动但命令窗口挂起,而它在Linux上正常工作。
有些人建议使用ProcessBuilder
但是当我使用ProcessBuilder时
如下:
task startmydb {
if (System.getProperty('os.name').toLowerCase().contains('windows')) {
ProcessBuilder pb = new ProcessBuilder(['cmd', '/c', 'startdb.cmd']);
pb.directory(new File('scripts'));
Process proc = pb.start();
proc.waitFor();
proc.exitValue()
}
}
它在Windows上工作正常,但我无法在Linux上使用它。
所以我被困在这里,如何使用上面的任何一个可以在Linux和Windows上工作?