Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何访问shell脚本文件中的节点JS(javascript)变量_Javascript_Node.js_Shell - Fatal编程技术网

如何访问shell脚本文件中的节点JS(javascript)变量

如何访问shell脚本文件中的节点JS(javascript)变量,javascript,node.js,shell,Javascript,Node.js,Shell,我正在从nodeJS文件运行shell脚本文件,我需要向shell脚本发送一些参数,并在shell脚本中使用它 #!/bin/bash echo "Creating Database Backup" #need to access dbname from JS FILE MONGO_DATABASE= dbname APP_NAME="app-name" USERNAME=$(sudo echo $USER) 我的js文件 var dbname = development.db.uri;

我正在从nodeJS文件运行shell脚本文件,我需要向shell脚本发送一些参数,并在shell脚本中使用它

#!/bin/bash
echo "Creating Database Backup"
#need to access dbname from JS FILE
MONGO_DATABASE= dbname 
APP_NAME="app-name"
USERNAME=$(sudo echo $USER)
我的js文件

var dbname = development.db.uri;
    console.log(dbname);
    var myscript = exec('sh ./scripts/mongo-backup.sh'+ dbname );
    myscript.stdout.on('data',function(data){
        console.log("!@#$%^&*&@#$%^&*$##$%^&*")
        console.log(data); // process output will be displayed here
    });
    myscript.stderr.on('data',function(data){
        console.log(data); // process error output will be displayed here
    });
这是我的shell脚本

#!/bin/bash
echo "Creating Database Backup"
#need to access dbname from JS FILE
MONGO_DATABASE= dbname 
APP_NAME="app-name"
USERNAME=$(sudo echo $USER)

虽然可能,但代码混合看起来违反直觉。我建议为dbname设置一个环境变量,两个nodej都将使用
process.env.dbname
捕获它,bash脚本将使用
$dbname
捕获它

如果坚持当前结构,只需执行以下操作:

var myscript = exec('DB_NAME='+ dbname + ' DB_USER=' + dbuser +' sh ./scripts/mongo-backup.sh');
如果您使用的是相当现代的节点,则可以使用以下语法:

var myscript = exec(`DB_NAME=${dbname} DB_USER=${dbuser} sh ./scripts/mongo-backup.sh`);
在bash文件中

#!/bin/bash
echo "Creating Database Backup"
MONGO_DATABASE= $DB_NAME 
APP_NAME="app-name"
USERNAME=$(sudo echo $USER)

虽然可能,但代码混合看起来违反直觉。我建议为dbname设置一个环境变量,两个nodej都将使用
process.env.dbname
捕获它,bash脚本将使用
$dbname
捕获它

如果坚持当前结构,只需执行以下操作:

var myscript = exec('DB_NAME='+ dbname + ' DB_USER=' + dbuser +' sh ./scripts/mongo-backup.sh');
如果您使用的是相当现代的节点,则可以使用以下语法:

var myscript = exec(`DB_NAME=${dbname} DB_USER=${dbuser} sh ./scripts/mongo-backup.sh`);
在bash文件中

#!/bin/bash
echo "Creating Database Backup"
MONGO_DATABASE= $DB_NAME 
APP_NAME="app-name"
USERNAME=$(sudo echo $USER)

这根本行不通:

var myscript = exec('sh ./scripts/mongo-backup.sh',+ dbname );
因为它试图从
dbname
(一元加号运算符)中生成一个数字,这很可能导致NaN,然后它作为第二个参数传递给
exec
(这应该是可选的选项对象)

你的意思可能是:

var myscript = exec('sh ./scripts/mongo-backup.sh ' + dbname);
另一件需要注意的事情是,您的脚本被声明为Bash脚本,并且您使用
sh
而不是
Bash
显式运行它。某些系统上的
sh
命令可能与Bash不兼容-例如,有时它是Dash或其他一些简单的shell,因此这更好:

var myscript = exec('bash ./scripts/mongo-backup.sh ' + dbname);
这将把它作为参数传递给脚本,您可以在shell脚本中以
$1
的形式访问该脚本:

#!/bin/bash
echo $1
或类似于您的示例:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
您可以使用
spawn
执行类似操作,而无需使用字符串连接:

var myscript = spawn('bash', ['./scripts/mongo-backup.sh', dbname]);
当您在
dbname
中有一些字符会被shell错误地解释为某些特殊字符时,这不会中断。这不太可能,但需要加以考虑

还可以将变量作为环境变量传递给shell脚本,以便直接使用命名变量。例如:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
现在您可以在shell脚本中使用
$dbname
,例如:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
或类似于您的示例:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
您还可以直接传递MONGO_数据库:

var env = Object.assign({}, process.env, { MONGO_DATABASE: dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
只需在脚本中使用它,无需其他变量:

#!/bin/bash
echo $MONGO_DATABASE
可以使用环境变量或参数将数据传递给shell脚本。有时一个更方便,有时另一个更方便

有关更多信息,请参阅文档:

更新 您可以发送多个带空格的参数以使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
与上面相同,但带有反勾号,要使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
与上面相同,但没有字符串连接,要使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
或作为环境变量传递,以用作
$dbname
$dbuser
$dbpass

var env = Object.assign({}, process.env, { dbname, dbuser, dbpass });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });

这根本行不通:

var myscript = exec('sh ./scripts/mongo-backup.sh',+ dbname );
因为它试图从
dbname
(一元加号运算符)中生成一个数字,这很可能导致NaN,然后它作为第二个参数传递给
exec
(这应该是可选的选项对象)

你的意思可能是:

var myscript = exec('sh ./scripts/mongo-backup.sh ' + dbname);
另一件需要注意的事情是,您的脚本被声明为Bash脚本,并且您使用
sh
而不是
Bash
显式运行它。某些系统上的
sh
命令可能与Bash不兼容-例如,有时它是Dash或其他一些简单的shell,因此这更好:

var myscript = exec('bash ./scripts/mongo-backup.sh ' + dbname);
这将把它作为参数传递给脚本,您可以在shell脚本中以
$1
的形式访问该脚本:

#!/bin/bash
echo $1
或类似于您的示例:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
您可以使用
spawn
执行类似操作,而无需使用字符串连接:

var myscript = spawn('bash', ['./scripts/mongo-backup.sh', dbname]);
当您在
dbname
中有一些字符会被shell错误地解释为某些特殊字符时,这不会中断。这不太可能,但需要加以考虑

还可以将变量作为环境变量传递给shell脚本,以便直接使用命名变量。例如:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
现在您可以在shell脚本中使用
$dbname
,例如:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
或类似于您的示例:

#!/bin/bash
MONGO_DATABASE=$1
# use $MONGO_DATABASE as you need
var env = Object.assign({}, process.env, { dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
#!/bin/bash
echo $dbname
#!/bin/bash
MONGO_DATABASE=$dbname
# use $MONGO_DATABASE as you need
您还可以直接传递MONGO_数据库:

var env = Object.assign({}, process.env, { MONGO_DATABASE: dbname });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });
只需在脚本中使用它,无需其他变量:

#!/bin/bash
echo $MONGO_DATABASE
可以使用环境变量或参数将数据传递给shell脚本。有时一个更方便,有时另一个更方便

有关更多信息,请参阅文档:

更新 您可以发送多个带空格的参数以使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
与上面相同,但带有反勾号,要使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
与上面相同,但没有字符串连接,要使用
$1
$2
$3

var myscript =
  exec('bash ./scripts/mongo-backup.sh ' + dbname + ' ' + dbuser + ' ' + dbpass);
var myscript =
  exec(`bash ./scripts/mongo-backup.sh ${dbname} ${dbuser} ${dbpass}`);
var myscript =
  spawn('bash', ['./scripts/mongo-backup.sh', dbname, dbuser, dbpass]);
或作为环境变量传递,以用作
$dbname
$dbuser
$dbpass

var env = Object.assign({}, process.env, { dbname, dbuser, dbpass });
var myscript = spawn('bash', ['./scripts/mongo-backup.sh'], { env });

,+
是invalid@GottZ它不正确但有效,它将其转换为NaN,假设它不是数字或数字在EOH derp内的字符串。。你是对的。ofc它可以用来将任何东西转换成数字invalid@GottZ它不正确但有效,它将其转换为NaN,假设它不是数字或数字在EOH derp内的字符串。。你是对的。ofc它可以用来将任何东西转换成数字我可以发送多个带有空格的参数吗,比如我有dbname,dbuser dbpass
var myscript=exec('bash./scripts/mongo-backup.sh'+dbname dbuser dbpass)或是