Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js 节点脚本如何在我当前的bash上下文(进程)中运行?_Node.js_Linux_Bash_Shell_Process - Fatal编程技术网

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

Node.js 节点脚本如何在我当前的bash上下文(进程)中运行?,node.js,linux,bash,shell,process,Node.js,Linux,Bash,Shell,Process,在bash中,您可以source或在当前上下文中运行一些bash脚本。因此,如果您在文件foo中包含alias bar='echo bam',并且当您像 $ . foo 它将把这个别名从文件foo中提取到您当前的上下文中 我知道我是否通常使用第一行运行节点脚本,如#/usr/bin/env节点则此脚本在子shell中运行或作为单独的进程运行。我希望避免这种情况,并使节点脚本作用于我当前的bash进程(上下文) 如何运行更改当前bash上下文的节点脚本 附言:任何例子都是好的。节点脚本只能更改我

bash
中,您可以
source
在当前上下文中运行一些bash脚本。因此,如果您在文件
foo
中包含
alias bar='echo bam'
,并且当您像

$ . foo
它将把这个别名从文件
foo
中提取到您当前的上下文中

我知道我是否通常使用第一行运行节点脚本,如
#/usr/bin/env节点
则此脚本在子shell中运行或作为单独的进程运行。我希望避免这种情况,并使节点脚本作用于我当前的bash进程(上下文)

如何运行更改当前bash上下文的节点脚本

附言:任何例子都是好的。节点脚本只能更改我的目录,但它必须再次发生在我当前的bash上下文中


子问题:如果在node中是不可能的(我很难相信这一点),或者是非常复杂的,那么在其他语言中是可能的吗?像PHP、Java、Ruby(我不要求使用C,因为它很明显:),如果是的话,请给我举一些例子。

我在写作时也遇到过同样的问题。因为你已经知道的原因,没有办法做你想做的事情。但是,如果您想在源代码shell脚本中使用node,有一种方法可以绕过它

因此,您不能为节点脚本提供源代码,但可以在源代码shell脚本中执行节点脚本。性能不是很好,但很有效。例如,您不能将
process.chdir('/tmp')并期望它更改当前进程中的当前工作目录。但您可以做的是将一个节点脚本设置为
console.log
s目录,并使用类似
cd$(node myscript.js)
的源代码shell脚本执行该脚本。例如,请查看我上面链接的项目中的代码。在这里,我使用一个bash函数来生成一个全局安装的npm模块的shell脚本,然后执行JS来更改当前的dir(至少在bash和zsh中)。虽然不太好看,但很管用


我知道这不是您要寻找的答案,但我已经找到了一种使用node来操纵当前bash上下文的方法,这一点非常接近。实际上,我发现了这个问题,因为我只是在尝试重构,并寻找更好的方法来实现。。如果我找到更好的方法,我会让你知道;-)

您可以将进程中当前正在运行的程序替换为
exec
,但随后您的进程将运行node,bash将从进程中消失,这不是您想要的,对吗?这是我不希望bash消失的问题。我希望能够改变我当前的bash上下文,然后完成我的脚本,并且仅在脚本更改后仍处于相同的bash上下文中。