问题标签 [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.
arrays - bash: how to update an associative array in an implicit subshell?
The problem: I cannot update an array in a while
loop. An illustration (not the actual problem):
This does not work, because the loop after the pipe runs in a subshell. All the changes that the loop does to variable wordcounts
are only visible inside the loop.
Saying export wordcounts
does not help.
Alas, I seem to need the pipe and the while read
part, so ways to rewrite the code above using for
is not what I'm looking for.
Is there a legitimate way to update an associative array form within a loop, or a subshell in general?
arrays - BASH:如何将子shell变量存储到数组中?
我有array1
,array2
和一个功能。
我正在尝试for j=0 to ARRAY_SIZE
循环获取数据array2[j]
,将其传递给函数,然后返回的输出将其存储在array1[j]
.
以下是我正在处理的代码部分:
_ppart_block_fstype
是我之前定义的函数,将返回我将存储在数组中的输出ppart_block_fstype
。上述函数的问题是使用了一些“重型工具”,因此实际上不可能在每个循环周期中调用它。
这!是一个很好的起点,但我被困在如何使$i
子shell可见,而且我也不确定我是否< <( )*
以正确的方式调用。
bash - Bash:在调用 shell 的上下文中执行脚本
我的理解是,当我在 BASH shell 中使用诸如启动子 shell 的语法执行脚本$ ./myscript.sh
并且代码在该 shell 中运行时,在我的 shell 上打印 STDOUT 和 STDERR 输出时,STDIN 是从我的 shell 中获取的。这就是脚本的交互方式。
文件“ myscript ”的第一行是#!/bin/bash
,这说明了用于执行脚本文件中的语法的解释器。
如果我使用语法source myscript.sh
,我的脚本中的代码将被“拉入”到我当前的环境中并在那里执行,而不是在子 shell 中执行。我无法使以下代码在我调用的脚本中运行$ ./myscript.sh
并影响我当前的 shell:
如果我放弃#!/bin/bash
并使用source
此脚本会更改我的命令提示符。是否可以以我可以调用它的方式将它安排在脚本中,$ ./myscript.sh
并且它会对我当前的 shell 而不是子 shell 进行更改?
linux - Bash 脚本 - 将子脚本 stderr 重定向到父级的标准输出
我确定我遗漏了一些简单的东西,但是我正在使用执行脚本来调用一些实用程序脚本,并且我想通过一个管道处理实用程序的所有输出。我的问题是实用程序使用 stderr 来报告错误情况,但我无法捕获它以在父脚本中使用。
父脚本:
子脚本
我期望的是stderr
of child
(以及它的所有命令)被重定向到stdout
(因此没有输出),但是当我执行时,parent
我会Error
回显到终端(“打印”被发送到 /dev/null)。
shell - 如何在没有命令行参数的情况下将参数传递给子shell(通过执行,而不是源)?
例如,我有一个主 shell 程序main.sh
,我有另一个子 shell 程序sub.sh
。我想将变量 var 传递给子 shell,但我不想使用命令行参数。示例代码如下:
我想看看输出:1
我知道这个问题很奇怪,但这个功能最适合我的需要。我无法获取,sub.sh
因为在实际程序中我有很多变量要传入......谢谢!
编辑:如果我sub.sh
在后台运行并且需要 10 个小时,并且我想sub.sh
在前台运行另一个变量来获取另一个变量b
怎么办?
bash - Bash 获取在 subshell 中启动的进程的进程 ID
我在这里查看这个问题,但它似乎对我不起作用:How to get the process id of a bash subprocess on command line
所以我有一个在子shell中启动的命令,例如:
然后我怎样才能获得该睡眠命令的进程 ID,并等待它?
如果我在上面链接中的所有进程 ID 都与我看到的不匹配之后执行 ps。
谢谢。
bash - 为什么 $$ 返回与父进程相同的 id?
我对 Bash 有疑问,我不知道为什么。
在 shell 下,我输入:
“getpid”是一个获取当前 pid 的 C 程序,例如:
让我困惑的是:
- 我认为“(命令)”是一个子进程(我对吗?),我认为它的 pid 应该与其父 pid 不同,但它们是相同的,为什么......
- 当我使用我的程序在括号之间显示 pid 时,它显示的 pid 是不同的,对吗?
- '$$' 是宏之类的东西吗?
你能帮助我吗?
bash - 什么时候命令替换比单独的相同命令产生更多的子shell?
昨天有人建议我在 bash 中使用命令替换会导致产生不必要的子 shell。该建议针对此用例:
尽我所能,这对于这个用例来说似乎是正确的。然而,试图验证这一点的快速搜索会导致大量令人困惑和矛盾的建议。似乎流行的智慧说所有命令替换的使用都会产生一个子shell。例如:
命令替换扩展到命令的输出。这些命令在 subshell 中执行,它们的标准输出数据是替换语法扩展的内容。(来源)
这似乎很简单,除非您继续挖掘,在这种情况下,您将开始找到对事实并非如此的建议的引用。
命令替换不一定会调用 subshell,并且在大多数情况下不会。它唯一保证的是无序评估:它只是先评估替换中的表达式,然后使用替换的结果评估周围的语句。(来源)
这似乎很合理,但这是真的吗?This answer to a subshell related question提示我man bash
注意以下事项:
管道中的每个命令都作为单独的进程执行(即,在子shell 中)。
这让我想到了主要问题。究竟什么会导致命令替换产生一个无论如何都不会产生的子shell来单独执行相同的命令?
请考虑以下情况并解释哪些情况会产生额外子外壳的开销:
这些对中的每一对都会产生相同数量的子shell来执行吗?POSIX 与 bash 实现有区别吗?在其他情况下,使用命令替换会产生一个子shell,而单独运行同一组命令则不会?
bash - 如果未在 X 时间内获取,则 BASH 变量超时
嘿伙计们,如果变量超过 X 时间试图获取内容,我正在尝试找出一种方法来使变量超时,这是基于触摸服务器以验证它是否具有 SSL。如果服务器在 X 秒内没有响应,我只想将变量设置为空(或者如果可能的话设置一些其他标志)
我正在使用的是
$line
现在baidu.com
在哪里
我尝试过这样的事情
但是意识到了几个问题,例如 A)我在一个子外壳中并且无法取出我的变量,B)我正在尝试运行response=#hash
并返回错误等
在捕获我的变量时运行超时的最佳方法是什么?
谢谢
multithreading - 设计一个 10 线程的进程
我在一个目录中有大约 500 个奇怪的数据文件。我正在使用命令处理这些文件。问题是它会连续提取每个,当然,任何实用程序都会如此。目前,我的进程所做的是产生大约 500 个进程,将它们错开成 10 个批次,每个批次都穿插着等待。像这样 。每个此设计 1 个文件 == 1 个进程。
所以我不会同时破坏系统。该命令实际上是另一系列的 shell 和 c 代码,用于解析数据文件并进行一些检查,其中涉及连接到 Oracle。我想重新设计它,以便每次运行命令时都不会打开新的数据库连接。所以假设有 100 个文件。我只想打开 10 个数据库连接,而不是 100 个单独的连接。我想做的方式是首先计算我有多少文件。将它们除以 10。每个除法是 10 个文件的“批次”——所以不是 100,而是 150 个文件,该过程应该自动创建 15 个目录。每个目录应该在其中移动 10 个文件,然后我可以运行
此设计有 10 个文件 == 1 个进程。
任何关于如何做到这一点的建议都可以通过命令进行。泰