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

bash - $> bash script.sh ... 分叉的 bash 进程是否又创建了一个子 shell?

如果我运行:

一个 fork-and-exec 恰好运行 bash 二进制文件。该进程是执行 script.sh 还是以与

首先创建一个子shell来执行脚本?

0 投票
3 回答
413 浏览

linux - 从 bash 中的管道迭代文件名

认为我很沮丧......我在过去的 2 个小时里试图弄清楚如何让一个包含管道的命令将输出泵送到一个 for 循环。关于我正在尝试的内容的快速故事,然后是我的代码。

我多年来一直在使用 xbmc。然而,在我开始后不久,我导出了我的库,结果证明这比它的价值更麻烦(尤其是我现在正在使用一组文件夹和其中包含的文件的命名方案)。我想删除 xbmc 添加的所有文件,所以我想我会编写一个脚本来删除所有必要的文件。但是,这就是我遇到问题的地方。

我正在尝试使用 locate 命令(因为它的速度),然后是一个 grep(删除所有文件系统 .tbn)和一个 egrep(从结果中删除 xbmc 创建的 .actors 文件夹),然后是一个排序(尽管排序不是必需的,我在调试期间添加了它,因此测试时的输出更好)。问题是只处理第一个文件,然后什么也没有。我在网上阅读了很多内容,发现 bash 为每个管道创建了一个新的子 shell,当它完成一次循环时,变量现在已经死了。所以我对如何解决这个问题做了更多的挖掘,一切似乎都表明我可以在 while 循环中解决它,但对于 for 循环却没有。

虽然我喜欢认为我能胜任脚本编写,但我总是会遇到这样的事情,这证明我仍然只是在学习基础知识。比我聪明的人的任何帮助将不胜感激。


阅读下面的回复后,我认为完成我想要的更好的途径如下。我很想对新剧本提出任何建议。我不只是复制和粘贴@Charles Duffy 的脚本,而是想找到正确/最佳的方式来作为一种学习体验,因为总有更好和最好的方式来编写代码。

-not -path首先在其中删除 xbmc 从输出中放置在源目录根目录(在本例中为 /share/movies)的 .actors 文件夹,因此不会从那里删除缩略图(.tbn 文件),但是我希望将它们从包含在 /share/movies 中的任何其他目录中删除(如果缩略图包含在特定的电影文件夹中,我想从 .actors 文件夹中删除它)。该-delete选项是因为它是在 gnu.org 页面中建议的,它-delete比调用更好,/bin/rm因为不需要为 rm 进程分叉,这样可以提高效率并防止开销。

我很确定我希望 for 行中的项目被引用,因此它是*.tbn在 find 命令中使用的文字。为了让您了解目录结构,它非常简单。我想删除这些目录中的任何 *.tbn *.jpg 和 *.nfo 文件。

0 投票
1 回答
199 浏览

arrays - 在 for 循环 bash 中传播变量

我有 15 个路径存储在一个数组变量中,文件名也存储为另一个数组变量,我想将每个路径绑定到其对应的文件。我正在寻找将每个路径元素与其相应文件绑定的东西,如下所示:

我需要:

我成功地管理了一个简单的for循环:

但我需要该变量ar3用于脚本的其他部分,并且我不能在 for-loop 子 shell 之外使用它。

非常感谢,盖伊

0 投票
2 回答
148 浏览

shell - 如何获取最后一个参数并在 shell 脚本中的最后一个参数之前停止?

我想将所有文件合并为一个。这里,最后一个参数是目标文件名。我想取最后一个参数,然后在最后一个参数之前停止循环。

这里给出了我想要实现的代码:

如何做到这一点?

0 投票
1 回答
190 浏览

time - 在没有子shell的情况下计时多个命令?

有没有办法使用timezsh 中的保留字来计时多个命令,而无需启动子 shell?

我知道这有效:

然而括号意味着创建了一个子shell,并且初始化的变量不会被导出。

我知道我可以捕捉前后的变量,比如

虽然对于临时计时来说,这有点麻烦。

0 投票
4 回答
979 浏览

bash - bash:使用文件列表限制for循环中的子shell

我一直在尝试让一个 for 循环同时运行一堆命令,并试图通过子外壳来实现。我设法将下面的脚本拼凑在一起进行测试,它似乎工作正常。

唯一的问题是我的实际循环将是 for i in files* 然后它就崩溃了,我认为是因为它启动了太多的子外壳来处理。所以我加了

现在失败了。有谁知道解决这个问题的方法?使用不同的命令来限制子shell 的数量或为$i 提供一个数字?

干杯

0 投票
2 回答
1014 浏览

bash - bash 子shell 是否会产生一个新的“bash”进程?

我正在阅读The TTY demystified。在“作业和会话”部分中,有一个用户使用 xterm 的示例:

并且有一个表格列出了所涉及的进程:xtermbash( 的子进程xterm)和最后三个进程(catlssort)都具有相同的 PPID(父进程 ID)——它们都是同一进程的子bash进程。

现在,我知道 bash 中的管道是在subshel​​ls中执行的。我一直认为这个子shell的东西意味着bash每个子shell都有一个额外的过程。我的问题是:不应该还有另外两个bash进程,都是第一个的孩子bash,然后ls是第一个的孩子,bash然后sort是第二个的孩子bash吗?文章中的表格是简化了,还是我对子shell的理解有误?

0 投票
0 回答
559 浏览

php - 运行具有来自 php 的 subshel​​l 命令的 bash 脚本

我正在尝试通过 php shell_execute("$command") 在 bash 中执行一个子脚本,其内容如下所示。

提交时我得到

基本上我的子脚本创建一个触摸文件然后发送邮件然后睡觉然后再次发送电子邮件然后rm触摸文件

因为我的输出是空白的。我尝试通过制作更清晰的父触发器脚本来运行此脚本

我只是在提交时调用这个触发脚本,这给了我一些进展

这次我也收到了一封电子邮件。这意味着我的子脚本确实被调用了,但我在 () 中的命令没有被执行。最后一个命令写成这样的原因是我需要确保所有这些命令只按顺序出现。这肯定是一些子shell/背景问题,但我不知道如何让整个脚本工作。另外我想直接运行子脚本,而不是调用触发器,而触发器又会调用子脚本。

我的表单代码,虽然看起来不错,如下所示

我对 web devl 完全陌生,并且已被警告说,如果有人执行一些随机命令,这可能是致命的。我同意,但只有获得授权的人才能访问此页面。此外,如果这是不可能的,那么通过适当的检查运行此脚本的方法是什么。

0 投票
2 回答
5455 浏览

variables - DB2 通过 bash 脚本输出到变量

我希望有人可以帮助将 db2 命令的输出应用到一个变量,以便稍后在脚本中使用。

到目前为止,我在...

当尝试$Counter在 while 循环之外引用时,它SQL1024N A database connection does not exist. SQLSTATE=08003会像echo $HowMany

我尝试了另一种使用管道的方法,这使得$HowMany显示正确的值,但由于那是一个子外壳,它后来丢失了。

如果可能的话,我宁愿不使用临时文件并删除它们,因为如果脚本随时中止,我不喜欢遗留文件。

0 投票
1 回答
151 浏览

bash - shell变量不保持值

我在文件中有 3 行/root/backuplist.txt

第一个echo打印完美,但最后一个打印空行;我不确定为什么。不知何故,$DIRS价值变得不稳定。