问题标签 [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.
linux - 如何在子shell中设置变量?
我有一个脚本,它将在每个服务器中运行并将某些文件复制到其中。脚本知道我在哪里运行以及我需要复制哪些文件。
脚本将从本地数据中心复制文件,local_dc
但如果它关闭或没有响应,那么它将从远程数据中心复制相同的文件remote_dc_1
,如果它也关闭,那么它将从另一个远程数据中心复制相同的文件,remote_dc_2
如下所示。
现在让我们说如果local_dc
机器停机,那么它将从remote_dc_1
机器复制文件,所以我需要发送一封电子邮件说这台机器停机所以从其他远程机器复制。如果 local_dc 机器停机,我不想发送多封电子邮件,所以我在最后发送电子邮件,这样每个文件我只会收到一封电子邮件,而不是多封电子邮件。
下面是我的脚本 -
我在带有变量 a、b 和 c 的子 shell 中做错了什么吗?
c - 实现一个子shell Unix C
我正在尝试在 C 中实现一个子 shell。我已经有一个普通的 shell,它看起来像这样:
我试图弄清楚 subshell 是如何工作的,以及它与上面的代码有何不同。
提前致谢。
bash - 在同一 shell 中运行生成的命令以访问定义的函数
在我的 Bash 脚本中,我正在生成一个包含一系列命令的字符串。其中一些命令是对该脚本中定义的函数的引用。那是:
现在,通过调用新的 Bash 脚本来运行命令不起作用 - 该函数myfunc
未定义。
有没有解决的办法?通过以某种方式使函数成为全局函数,或者通过使这些命令在当前 shell 中运行?
regex - 通过命令提供 sed 匹配的块
我有 json 行,每行包含多个部分,如下所示:
我想将所有行中的每个出现都转换为更易于阅读的内容:
我尝试使用 sed 将匹配的块(在本例中为时间戳)放入 date 命令的参数列表中。这失败了。
为了调试这一切,我在日期中添加了一个“echo”以验证它应该运行的命令
为什么第一个命令没有按预期运行?
我现在最好的猜测是首先执行子shell,而不用\1替换,然后sed实际使用结果输出。
我如何实现我想要做的事情?
PS我使用的是CentOS 6.6
bash - pgrep -P $$ 给出一个不存在的进程 id
它输出
它只发生在陷阱中。为什么将不存在的 PID 附加到数组?以及如何避免这种奇怪的行为?
bash - 用于在脚本中设置 SHELLOPTS 的 Bash 子shell
这个问题不是 cygwin 特定的。但是,在 cygwin 邮件存档https://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html中有各种用于设置 cygwin 特定 igncr shellopt 变量的说明,其中之一是说明:
4a。对于单个受影响的脚本,在 she-bang 之后添加以下行: ~ (set -o igncr) 2>/dev/null && set -o igncr; # 需要注释
我知道 set -o igncr 在 SHELLOPTS 中设置了 igncr。但是,我不明白为什么该指令还包括在子外壳中调用它。据我了解,子shell的变量和环境不会留在父进程中。它有什么用?
bash - 在同一个子shell中分配和使用变量
我正在做一些非常简单的事情,例如:v=5 echo "$v"
并期望它打印5
. 但是,事实并非如此。刚刚设置的值不适用于下一个命令。
我最近了解到“在大多数 shell 中,管道的每个命令都在单独的 SubShell 中执行”。但是,在这种情况下,两个命令都在同一个子 shell 中执行。
为什么会这样?有没有办法让这个工作?
完整示例:
linux - 将变量传递给子shell时遇到问题
所以这是我的问题,我有这个脚本,我在其中导出两个变量,但是它们没有进入子shell。
该脚本的重点是更改用户密码并清除 CentOS 和 Ubuntu 主机的 pam_tally。
一点背景是这个环境的用户是由 puppet 管理的,但是密码都是本地的,也不允许使用 ssh 密钥(这是一成不变的,无法更改,所以我必须使用我得到的东西)以及原因是每次登录都必须是手动的(偶数会话限制为两个,因此您甚至无法有效地使用 csshX)。
这是我的脚本
bash - 使用 Here Document 通过 ssh 调用 subshell $() 来执行 bash 命令
我尝试通过 ssh 发送命令,如下所示:
但我的问题是,该$(uname -a)
部分实际上创建了一个子shell,并且不是在 192.168.1.1 服务器上执行,而是在我的系统上执行,我从中执行了这个命令。
我该如何解决?
PS我的实际示例涉及 docker stop all 命令,看起来像
但我简化了问题。
更新:对不起,我过分简化了我的问题。我的命令使用 Here Document (因为里面的命令很复杂并且使用了很多不同的引号)
所以 Ignacio Vazquez-Abrams 解决方案将不起作用