问题标签 [subshell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
6461 浏览

bash - 如何在不创建子shell的情况下将命令的输出存储在变量中[Bas​​h

ksh有一个非常有趣的结构来做到这一点,在这个答案中有详细说明:https ://stackoverflow.com/a/11172617/636849

从 Bash 4.0 开始,有一个内置的mapfile内置命令可以解决这个问题: http ://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html

但奇怪的是,它似乎不适用于进程替换:

但是如何在 Bash v3.2 中做到这一点?


这是我能想到的——它有点乱,但是foo在顶级 shell 上下文中运行,并且它的输出在a顶级 shell 上下文中的变量中提供:

这当然假设了两件事:

  • 允许先进先出
  • 正在做缓冲的命令组被允许进入后台

我测试了它在这些版本中的工作:

  • 3.00.15(1)-release (x86_64-redhat-linux-gnu)
  • 3.2.48(1)-release (x86_64-apple-darwin12)
  • 4.2.25(1)-release (x86_64-pc-linux-gnu)

附录

我不确定mapfilebash 4.x 中的方法是否符合您的要求,因为进程替换<()会创建一个全新的 bash 进程(尽管不是该 bash 进程中的 bash 子shell):

所以虽然$BASH_SUBSHELL这里是0,是因为它在进程替换中处于新shell进程60780的顶层。

0 投票
2 回答
130 浏览

bash - 子外壳优先级

昨天我得到了一些关于使用的澄清flock,一些简单的概念对我来说变得清晰了。

我现在的问题是关于子壳。看看这个块

我的理解是以前200>/var/lock/mylockfile运行 flock -s 200,但是如果我尝试这样的事情

我从 BASH 收到一个错误

引入分号

修复错误,但导致子外壳返回command运行。

所以我想知道初始示例如何导致重定向首先运行。这与>over sub-shell(list)符号的优先级有关吗?查看 BASH 联机帮助页,我发现

运算符按优先级顺序计算。括号中的子表达式首先被评估,并且可以覆盖上面的优先规则。

0 投票
0 回答
187 浏览

shell - 从文件中读取输入并将其传递给子 shell

我有一个场景,我必须监视在不同服务器上运行的作业,作业详细信息(作业名称、主机服务器等)存在于 dat 文件中。

我编写了一个脚本,该脚本从 dat 文件中读取详细信息并调用存在作业监视逻辑的本地方法。

该脚本运行良好,并且正在按顺序监控作业,即一次一项作业。

我想同时监视作业,即将作业详细信息传递给子shell,以便同时监视每个作业。

我已经为每个作业添加了创建子外壳的逻辑(在方法的末尾附加 & ),但作业仍在按顺序进行监控。

有没有其他方法可以在子 shell 中调用本地方法?

监控脚本

输入数据文件

0 投票
4 回答
3945 浏览

bash - 为什么要避免子shell?

我在 Stack Overflow 上看到了很多答案和评论,其中提到了做一些事情来避免 subshel​​l。在某些情况下,给出了这样做的功能原因(通常,可能需要读取在其内部分配的子shell外部的变量),但在其他情况下,避免似乎被视为本身的目的。例如

为什么是这样?是为了风格/优雅/美丽吗?为了性能(避免分叉)?为了防止可能的错误?还有什么?

0 投票
1 回答
736 浏览

bash - 如何区分脚本中的“命令替换”和“子shell”?

我需要区分两种情况:( ...subshel​​l... ) vs $( ...命令替换...)

我已经有了以下函数,它可以区分在命令替换或子 shell 中运行和直接在脚本中运行。

示例输出:

期望的输出

但我想更新代码,以便区分命令替换和子shell。我希望它产生输出:

trapPS 我需要区分这些情况,因为当在命令替换和子 shell 中运行时,Bash 对内置命令有不同的行为。

PPS 我也关心echoScriptRunWay | cat命令。但这对我来说是我在这里创建的新问题。

0 投票
1 回答
131 浏览

bash - 如何在bash中将变量传输到子进程

大约一个小时前我发布了一个问题,但没有得到任何回应,我现在正在尝试不同的东西,我将通过包含更少的代码来简化我的问题,但是如果你想查看我正在使用的其余代码,请检查我的最后一个问题bash 比特币监视器中记录到 sql 泄漏数据的并行进程?. 我无法让这些变量成功传输到子shell ./test。感谢您的帮助。阵列的 IP 端口名称和地址是在 for 循环之外定义的,我可以输入 echo 命令来验证它们是否通过。

0 投票
2 回答
1080 浏览

bash - 管道时疏水阀是否按预期工作?

这是问题演示的最小代码:http: //pastebin.com/5TXDpSh5

输出

预期产出

注意:我测试了 OSX 10.9.2 bash (3.2.51) - 其他版本的 bash 与实际预期输出有相同的差异,如下所述

0 投票
1 回答
326 浏览

bash - ( ) & 和 ( &) 的区别?

我想知道这两种语法在 bash:( &)( ) &.

我注意到的唯一区别是,(tty &)将返回“不是 tty”,而(tty) &将返回当前的 tty 名称,但为什么呢?

举个例子,我应该运行(setsid startx &)还是(setsid startx) &

0 投票
2 回答
177 浏览

shell - ksh --> 是否可以在子 shell 中在父 shell(主 shell)上运行命令?

我正在尝试编写一个简单的脚本来更改我的主 shell 中的目录。我让它在子外壳中更改目录(如上所示),但显然当脚本运行完成时,它会将我踢回外壳,我又回到原来的目录中。

是否可以从子外壳中将命令传递给外壳?我可以将 cd 命令传递给外壳吗?

例如,如果我运行:

我希望我的目录是:

一旦我回到外壳。

0 投票
1 回答
726 浏览

tee - tee>(...) 的退出状态

我正在执行:

我希望Command2根据grep的退出状态执行,而在当前配置中,它是根据tee的结果执行的。

据我所知 pipefail 和 pipestatus 在这里不起作用(如果我错了,请纠正我)。

基于 Alexej Answer 修改 Origian 问题

我也试过Command1 | tee >(grep sth || Command2)了,这适用于我原来的问题,但是当我试图在子shell中设置我的测试状态时;例如,Command 1 | tee>(grep sth || Result="PASSED")以后可以访问我代码的其他块中的结果。所以我还是有问题。

谢谢