Articles of bash

如何在Windows和Unix上运行npm sh脚本

我想运行一个sh脚本,通过npm scripts来检测我的npm版本。 我有以下脚本,它很酷: if [ $(npm -v | cut -c 1 | awk '{print $1\"<3\"}' | bc -l) != 0 ]; then echo '[ERROR] You need npm version @>=3\n' && false; fi 但是,当我在Windows上运行脚本时,这个脚本只能在* NIX上工作我得到一个错误: $(npm was unexpected at this time. 我想检测,如果我在Windows上运行的脚本,然后不执行脚本,我试过,但只能在* NIX: if [ 'uname -s' != CYGWIN* ]; then if [ $(npm -v | […]

apm(atom的包pipe理器)启动shell运行错误

我正在处理我的osx 10.11系统中的apm错误。 当我跑步 apm 在我的命令行中,由于错误的文件path导致错误: /usr/local/bin/apm: line 32: /Applications/Atom.app/Contents/Resources/app/apm/node_modules/.bin/node: No such file or directory 签出后,我发现:在apm shell(/Atom.app/Contents/Resources/app/apm/node_modules/.bin/apm)中,有一个while循环: while [ -L "$binDir" ] do binDir=`readlink "$binDir"` builtin cd "`dirname "$binDir"`" binDir=`basename "$binDir"` done 似乎这个循环只在我的osx系统上运行一次,而且在其他系统上运行两次,我所拥有的缺陷就是因为这个原因。

节点脚本如何在我当前的bash上下文(进程)中运行?

在bash你可以source或. 在当前的上下文中运行一些bash脚本。 所以,如果你有例如文件foo与alias bar='echo bam'在其中,当你运行它像 $ . foo 它会从文件foo中将这个别名发送到当前的上下文中。 我知道,如果我通常使用#!/usr/bin/env node第一行来运行节点脚本,那么这个脚本在子shell中运行,或者作为单独的进程运行。 我想避免这一点,并使节点脚本作用于我当前的bash进程(上下文)。 我怎样才能运行节点脚本,改变我当前的bash上下文? ps:任何例子都不错。 节点脚本只能改变我的目录,但它也必须发生在我当前的bash上下文中。 ps2:小问题:如果在节点中是不可能的(我很难相信这个),或者它非常复杂,那么在其他语言中是可能的吗? 像PHP,Java,Ruby(我不问C,因为它很明显:)如果是这样,请给我一些例子。

产生交互式进程并在NodeJS中退出

我试图完成(我认为)一个相当简单的事情,但找不到任何现有的答案,所以在这里。 我想在节点中模仿下面的bash脚本: #!/usr/bin/bash mysql 所以基本上就像在命令行input“mysql”一样。 到目前为止,我提出了以下几点: var spawn = require('child_process').spawn; var child = spawn('/usr/bin/mysql', [], {stdio: 'inherit', detached: true}); child.unref(); 这工作正常(呈现给我的MySQL提示符),但是当我键入一个命令它被发送到bash命令行不是MySQL。 我试过其他的stdio选项(pipe道,忽略)与标准输出,stderr等听众,但这让我尽可能悬空提示。 任何和所有build议表示赞赏!

下面的代码中db.createCollection会不会build立一个新的数据库?

我在Node工作区的server.js文件中有下面这段代码。 我的问题是,每次我从bash命令行运行我的server.js文件,我是否设置了一个名为polls的新集合? 或者MongoDb认识到集合已经存在? 什么时候我终止我的连接到Mongo,然后从命令行重新启动它? mongo.connect('mongodb://localhost:27017/url-shortener', function(err, newDb){ if(err){ throw new Error('Database failed to connect'); }else{ console.log('Successfully connected to MongoDb database'); } db = newDb; db.createCollection('polls', { autoIndexId: true }); });

为什么我无法评估.load在node.js中启动交互式脚本?

在node.js中,您可以传递参数-i以获取交互式控制台,然后传递-e来评估JavaScript语句。 我试过跑步: $ node -i -e '.load ./someScript.js' .load someScript.js; ^ SyntaxError: Unexpected token . at Object.exports.runInThisContext (vm.js:53:16) at Object.<anonymous> ([eval]-wrapper:6:22) at Module._compile (module.js:410:26) at node.js:578:27 at nextTickCallbackWith0Args (node.js:419:9) at process._tickCallback (node.js:348:13) 我得到一个错误,但如果我尝试从交互式节点提示运行相同的东西,它加载得很好; 即 > .load ./someScript.js 还有什么我需要做的做这个工作?

如何在特定的URL中启动Node.js?

当我在应用程序中更新(并testing)特定页面时,需要停止服务器,再次使用node server.js重新启动,切换到浏览器窗口,按F5并切换回terminal以查看输出。 这需要很多时间.. 🙂 有没有一种方法可以像这样启动Node: node server.js -url /my_page 所以我可以直接看到输出,就好像有人从他们的浏览器中打开页面? 我发现这个问题,但我想它包含在服务器代码,所以它也需要每次更新。 这是一个解决scheme,但我想知道是否有更快的方法来做到这一点。 谢谢, 编辑: 随着curl,我得到这个错误: $ node server.js & curl 'http://localhost:5000/my_page' [2] 12824 curl: (7) Failed to connect to localhost port 5000: Connection refused [1] Terminated node server.js $ Listening on port 5000 注意最后一行,是否在服务器启动之前执行curl ?

用sh / bash发送IPC消息给父进程(Node.js)

我有一个Node.js进程,这个进程分叉了一个shsubprocess来运行一个bash脚本。 像这样的东西: const cp = require('child_process'); const n = cp.spawn('sh',['foo.sh'], { stdio: ['ignore','ignore','ignore','ipc'] }); 在我的bash脚本(foo.sh)中,如何发送IPC消息回到Node.js父进程? 无法find如何做到这一点。 做更多的研究,看起来我会更接近IPC的内部。 有一件事可能会有帮助,如果我将父PID传递给bash脚本,那么也许我可以做些什么。

可靠地确定使用shell(cmd,bash等)来运行node.js脚本

正如标题所述,我想确定使用shell( cmd , bash等)来运行node.js脚本(从脚本中)。 当用os模块检测操作系统可以给出一些线索的时候,一些实例是不够的,比如像在GitBash或者Cygwin这样的terminal上通过win32 bash执行。 有没有这个信息的process对象的某个属性? *编辑:虽然process.env.SHELL是一个选项,但在使用某些terminal时,并不总是可以填充,也可能是undefined

child_process给出执行grep命令失败

我想在节点中使用child_process来search文件的存在: const { exec } = require('child_process'); exec('ls | grep "filename"', (err, result) => {…}) 当文件名存在时,exec结果是好的。 但是当文件名不存在时,我得到一个错误: 命令失败:ls | grep“文件名” 在这种情况下,如何判断是执行命令时是否有错误,或者只是因为没有find结果? 编辑 感谢您不要以这种方式search文件的build议。 上面的代码不是实际的代码,只是一个演示我的问题与grep的演示文稿。 在我的实际案例中,我正在通过任务假脱机程序在输出中search关键字,因此我使用了exec和tsp -l | grep … tsp -l | grep …