问题标签 [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 投票
1 回答
204 浏览

bash - 为什么 $BASH_SUBSHELL 不会在管道中增加

我知道管道会创建子外壳。

我测试$BASH_SUBSHELLand $BASHPID,发现$BASH_SUBSHELL管道没有增加

0 投票
1 回答
590 浏览

bash - 如果循环将输出发送到管道,则重置全局变量

根据 bash(1) 手册页,当我运行以下命令时:

输出将是:

在循环之后(作为子外壳运行)变量 x 重置为 2。但是如果我删除管道 x 将被更新:

我需要更改 x 但是,我也需要管道。知道如何解决这个问题吗?

0 投票
2 回答
1014 浏览

python - Unix Subshel​​l 从父 bash 继承命令历史记录

我编写了一系列 python 工具来产生新的 bash 会话。我希望这些单独的子外壳继承父级的命令历史记录。我努力了:

.bash_profile. 但它没有给我我需要的东西。我已经看到这样做了。我的工具使用:

产生一个子进程。

想法?更好的方法?

0 投票
2 回答
1279 浏览

bash - 限制产生的子壳的数量

我正在尝试限制脚本中生成的子shell 的数量,该脚本用于嗅探我们的内部网络以审计我们网络中的 Linux 服务器。该脚本按预期工作,但由于我嵌套for循环的方式,它为每个网络生成 255 个子 Shell,因此由于生成了超过 1000 个进程,因此它会杀死 CPU。我需要能够限制进程的数量,并且由于变量在 Sub Shell 中会失去其价值,所以我无法找到一种方法来完成这项工作。同样,该脚本有效,它只是产生大量进程 - 我需要将其限制为,例如最多 10 个进程:

我发现这个解决方案有效,但不适用于我的情况,因为无论如何,它仍然会在限制进程的逻辑之前产生进程。我想也许我只是看代码太久了,这只是一个简单的逻辑问题,我把东西放在错误的区域,或者以错误的顺序。


接受的答案:

我已经接受了 huitseeker 的回答。他能够为我提供逻辑如何运作的方向,让我让它发挥作用。最终脚本:

0 投票
1 回答
725 浏览

bash - 通过 xterm 和 mpg123 进行 bash 重定向

这是我.fluxbox/startup文件 的一部分

如所写,重定向失败,所有此类输出都出现在xtermxterm部分读取 的手册页,

mpg123根据需要播放数组 a 的内容,并且可以根据选项-C指定通过键盘进行控制,但xterm似乎会阻碍重定向到文件。在这种情况下可以进行重定向吗?

或者,我可以在没有xtermto contain的情况下运行它mpg123,在这种情况下,我会获得重定向,但无法mpg123通过键盘进行控制,因为它在某些后台子shell 中运行而没有与键盘的连接。有没有办法建立这种联系?

0 投票
4 回答
1859 浏览

bash - Bash:用于 xargs 的导出函数

当我的 bash 脚本开始变得复杂时,我通常会将它们分解为函数。这尤其适用于复杂的管道,因为一系列复杂的管道命令(例如包含 while 循环)会很快变得难以阅读。当需要并行化时更是如此,其中 xargs 非常有帮助。

我知道我可以使用 将函数导出到子shell export -f,因此在一个简单的情况下我可以做到

但是,如果myfunction依赖于其他函数,这将变得难以维护——每次函数发生变化时,子shell 执行myfunction更改所需的函数时,导出语句都必须更改——这似乎很容易出错。

有没有一些通用的方法来导出函数供子shell使用?我正在考虑类似于“导出所有定义的函数”命令的东西,然后它允许像这样的代码结构

0 投票
2 回答
1296 浏览

bash - 如何使用 stat 读取超时?

我有以下代码:

如何静音 stat 的输出,同时仍然能够在后续测试中检测到其错误级别?

在子外壳内添加>/dev/null 2>&1,或在读取行的末尾添加不起作用。但一定有办法...

感谢您对此的任何见解!

0 投票
1 回答
2388 浏览

bash - 为什么 tee 等待所有子shell完成?

我有一个运行 mysqld 和 fork 以继续运行的服务器脚本。举个例子:

为什么 tee 等待子进程结束才结束?

编辑:

例如,以下始终挂起:

0 投票
1 回答
2915 浏览

bash - 子外壳 IO 重定向

给定一个文件"foo.txt",创建自:

我正在尝试读取文件的第一行和最后一行,我首先将文件重定向到子shell,以便命令列表将按顺序使用文件——每个命令都使用从点的输入最后一个命令已经离开它,我想

但是,如果我尝试使用临时文件描述符进行相同操作,则输出不一样:

问题

  1. 我不确定要命名什么<(seq 1 10),但这个临时文件描述符和常规文件描述符( "foo.txt") 有什么区别,导致子 shell 执行行为不同?

  2. 我怎样才能实现将 a 重定向"foo.txt"到子 shell 的相同行为,但没有临时文件——而不实际创建文件。

0 投票
1 回答
1240 浏览

linux - 如何从分离的 GNU 屏幕会话中邮寄命令的输出?

我正在尝试编写一个在会话bash中执行命令的脚本,该脚本在screen会话中显示命令的输出,并在完成后通过电子邮件发送它。但是,它并不总是有效,我不知道为什么。我已将行为提炼为以下示例:

命令

每次都能正常工作,就像

然而,命令

仅有时有效。

命令结构的原因是它在 cron-job 中用于在分离的screen会话中启动脚本(用户可以重新附加以实时查看脚本的输出)以及在脚本完成后通过电子邮件发送输出。ls我已经用示例中的脚本替换了脚本来测试和演示问题。

tail -f /var/log/mail.log用来观看正在发送的邮件。我执行了screen十次命令,只发送了两封邮件。为了更难测试,我这样做了:

这导致发送了 100 封邮件中的 39 封。

这最初是在 OSX 上完成的,但我也在 Linux 机器上进行了测试,并看到了类似的行为。我认为这与子壳有关,screen但我不确定问题是什么。

可以做些什么来完成这项工作?