2015-03-13 193 views
0

尝试从Java运行脚本sh时出现问题。我已经尝试用 解决方案similar problems at stack overflow从Java运行shell脚本

问题不是脚本本身的电话,但该命令pg_dump的

=>如果我运行从控制台下面的脚本./my_script.sh一切正常的话:

NOW="$(date +%Y%m%d_%H%M%S)" 
BACKUP_FILE="backup_${NOW}.sql"  
FOLDER="./backups" 
if [ ! -d "$FOLDER" ]; then 
    mkdir $FOLDER 
fi 
OUTPUT=${FOLDER}/${BACKUP_FILE} 

HOST="my.host.dir" 
PORT="8080" 
DB_NAME="dbName" 
USER="user" 
PASS="pass" 

OPT="-h ${HOST} -p ${PORT} -U ${USER} -f ${OUTPUT} -c -C -i -b -v ${DB_NAME}" 
EXPORT="export PGPASSWORD=${PASS}" 
RUN="pg_dump ${OPT}" 
echo ${EXPORT} 
echo ${RUN} 
$EXPORT 
$RUN 

=>但是如果我想从Java代码调用它,则echo命令成功(所以脚本已被调用),但不是pg_dump命令:

int exitValue = 0; 
try { 
    ProcessBuilder pb = new ProcessBuilder(scriptPath); 
    Process p = pb.start(); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
    LOG.log(Level.FINE, line); 
    } 
    exitValue = p.waitFor(); 
    LOG.log(Level.FINE, "Process exitValue: " + exitValue); 
} catch (IOException | InterruptedException e) { 
    LOG.log(Level.SEVERE, "Executing " + scriptPath, e); 
    return false; 
} 
return exitValue == 0; 

我的问题是为什么相同的脚本从控制台成功,但没有从Java调用它?

+1

尝试将#!/ bin/bash作为脚本的第一行。 – Don 2015-03-13 08:45:05

回答

1

你可以试试这个

try { 
     ProcessBuilder pb = new ProcessBuilder("script.sh"); 
     Process p = pb.start();  
     p.waitFor();     
     System.out.println("Script executed Finish"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
+0

已经;编辑我的问题给所有的例外管理。抱歉! – Manu 2015-03-13 08:43:31