如何在bash脚本中运行所有命令?

时间:2019-07-11 11:40:58

标签: mysql node.js bash

我正在编写一个bash脚本,该脚本执行一系列javascript文件,所有这些文件都是某种MySQL查询。问题是,当脚本的第一行执行时,它将停止该过程,并且不让其他javascript文件运行。

我已经尝试过&,希望每行都希望它在后台运行并且不会停止执行流程。

#!/bin/bash
# a script to delete the database and create the tables
node createDatabase &
node createTables &

当createDatabase.js文件正确执行时,将有一个回调函数输出“数据库创建成功”,并且执行将在那里冻结。

1 个答案:

答案 0 :(得分:1)

问题一定是来自nodejs,Nodejs不会在数据库创建时终止该过程,您必须在成功时调用process.exit(0)或在错误时调用process.exit(1),否则它将等待信号终止或停止

这是一个简单的Node.js脚本,可创建数据库并根据来自数据库的响应退出。

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "my.test.com",
  user: "root",
  password: "password"
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
  con.query("CREATE DATABASE mydbtest", function (err, result) {
    if (err){
      throw err;
      process.exit(1);
    }
    else{
      console.log("Database created");
      process.exit(0);

    } 

  });
});

现在,另一个脚本将在上述数据库上创建表。

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "mydb.test.com",
  user: "root",
  password: "password",
  database: "mydbtest"
});

con.connect(function(err) {
  if (err){
    throw err;
    process.exit(1);
  }
  else{
    console.log("Connected!");
  var sql = "CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))";
  con.query(sql, function (err, result) {
    if (err){
      throw err;
      process.exit(1)
    } 
    else{
      console.log("Table created");
process.exit(0)
    }
  });
  } 

});

此代码中的重要部分是process.exit(0)process.exit(1)

现在Bash脚本将是

#!/bin/bash
echo "creating db"
nodejs creatdb.js
echo "creating talbe"
nodejs createtable.js

您无需在后台发送它们,现在基于一个退出代码,您可以退出脚本或做出任何决定。

enter image description here