问题标签 [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.
bash - 为什么 $BASH_SUBSHELL 不会在管道中增加
我知道管道会创建子外壳。
我测试$BASH_SUBSHELL
and $BASHPID
,发现$BASH_SUBSHELL
管道没有增加
bash - 如果循环将输出发送到管道,则重置全局变量
根据 bash(1) 手册页,当我运行以下命令时:
输出将是:
在循环之后(作为子外壳运行)变量 x 重置为 2。但是如果我删除管道 x 将被更新:
我需要更改 x 但是,我也需要管道。知道如何解决这个问题吗?
python - Unix Subshell 从父 bash 继承命令历史记录
我编写了一系列 python 工具来产生新的 bash 会话。我希望这些单独的子外壳继承父级的命令历史记录。我努力了:
在.bash_profile
. 但它没有给我我需要的东西。我已经看到这样做了。我的工具使用:
产生一个子进程。
想法?更好的方法?
bash - 限制产生的子壳的数量
我正在尝试限制脚本中生成的子shell 的数量,该脚本用于嗅探我们的内部网络以审计我们网络中的 Linux 服务器。该脚本按预期工作,但由于我嵌套for
循环的方式,它为每个网络生成 255 个子 Shell,因此由于生成了超过 1000 个进程,因此它会杀死 CPU。我需要能够限制进程的数量,并且由于变量在 Sub Shell 中会失去其价值,所以我无法找到一种方法来完成这项工作。同样,该脚本有效,它只是产生大量进程 - 我需要将其限制为,例如最多 10 个进程:
我发现这个解决方案有效,但不适用于我的情况,因为无论如何,它仍然会在限制进程的逻辑之前产生进程。我想也许我只是看代码太久了,这只是一个简单的逻辑问题,我把东西放在错误的区域,或者以错误的顺序。
接受的答案:
我已经接受了 huitseeker 的回答。他能够为我提供逻辑如何运作的方向,让我让它发挥作用。最终脚本:
bash - 通过 xterm 和 mpg123 进行 bash 重定向
这是我.fluxbox/startup
文件 的一部分
如所写,重定向失败,所有此类输出都出现在xterm
。xterm
部分读取 的手册页,
mpg123
根据需要播放数组 a 的内容,并且可以根据选项-C
指定通过键盘进行控制,但xterm
似乎会阻碍重定向到文件。在这种情况下可以进行重定向吗?
或者,我可以在没有xterm
to contain的情况下运行它mpg123
,在这种情况下,我会获得重定向,但无法mpg123
通过键盘进行控制,因为它在某些后台子shell 中运行而没有与键盘的连接。有没有办法建立这种联系?
bash - Bash:用于 xargs 的导出函数
当我的 bash 脚本开始变得复杂时,我通常会将它们分解为函数。这尤其适用于复杂的管道,因为一系列复杂的管道命令(例如包含 while 循环)会很快变得难以阅读。当需要并行化时更是如此,其中 xargs 非常有帮助。
我知道我可以使用 将函数导出到子shell export -f
,因此在一个简单的情况下我可以做到
但是,如果myfunction
依赖于其他函数,这将变得难以维护——每次函数发生变化时,子shell 执行myfunction
更改所需的函数时,导出语句都必须更改——这似乎很容易出错。
有没有一些通用的方法来导出函数供子shell使用?我正在考虑类似于“导出所有定义的函数”命令的东西,然后它允许像这样的代码结构
bash - 如何使用 stat 读取超时?
我有以下代码:
如何静音 stat 的输出,同时仍然能够在后续测试中检测到其错误级别?
在子外壳内添加>/dev/null 2>&1
,或在读取行的末尾添加不起作用。但一定有办法...
感谢您对此的任何见解!
bash - 为什么 tee 等待所有子shell完成?
我有一个运行 mysqld 和 fork 以继续运行的服务器脚本。举个例子:
为什么 tee 等待子进程结束才结束?
编辑:
例如,以下始终挂起:
bash - 子外壳 IO 重定向
给定一个文件"foo.txt"
,创建自:
我正在尝试读取文件的第一行和最后一行,我首先将文件重定向到子shell,以便命令列表将按顺序使用文件——每个命令都使用从点的输入最后一个命令已经离开它,我想:
但是,如果我尝试使用临时文件描述符进行相同操作,则输出不一样:
问题:
我不确定要命名什么
<(seq 1 10)
,但这个临时文件描述符和常规文件描述符("foo.txt"
) 有什么区别,导致子 shell 执行行为不同?我怎样才能实现将 a 重定向
"foo.txt"
到子 shell 的相同行为,但没有临时文件——而不实际创建文件。
linux - 如何从分离的 GNU 屏幕会话中邮寄命令的输出?
我正在尝试编写一个在会话bash
中执行命令的脚本,该脚本在screen
会话中显示命令的输出,并在完成后通过电子邮件发送它。但是,它并不总是有效,我不知道为什么。我已将行为提炼为以下示例:
命令
每次都能正常工作,就像
然而,命令
仅有时有效。
命令结构的原因是它在 cron-job 中用于在分离的screen
会话中启动脚本(用户可以重新附加以实时查看脚本的输出)以及在脚本完成后通过电子邮件发送输出。ls
我已经用示例中的脚本替换了脚本来测试和演示问题。
我tail -f /var/log/mail.log
用来观看正在发送的邮件。我执行了screen
十次命令,只发送了两封邮件。为了更难测试,我这样做了:
这导致发送了 100 封邮件中的 39 封。
这最初是在 OSX 上完成的,但我也在 Linux 机器上进行了测试,并看到了类似的行为。我认为这与子壳有关,screen
但我不确定问题是什么。
可以做些什么来完成这项工作?