subshell相关内容

读入管道中的变量时会发生什么?

echo hello | read str echo $str read在管道之后执行,这意味着echo的输出被读入str,但由于它位于管道之后,str的内容现在位于父外壳无法读取的子外壳中。 str的内容发生了什么?管道是否创建子外壳,然后一旦内容被读入str,父进程是否杀伤子进程并擦除str-或者str的内容继续存在于外壳之外的某个地方?比如,我们如何看清亚壳里有什么?我们可以从父外壳中 ..
发布时间:2022-04-09 18:18:38 其他开发

什么时候 bash 变量被导出到子 shell 和/或被脚本访问?

我对bash 变量是否导出到子shell 以及脚本何时可以访问感到困惑.到目前为止,我的经验使我相信 bash 变量自动可用于子 shell.例如: >FOO=酒吧>回声 $FOO酒吧>(回声 $FOO)酒吧 以上似乎表明 bash 变量可以在子 shell 中访问. 鉴于此脚本: #!/usr/bin/bash# c.sh函数(){回声之前回声 ${FOO}回声后}功能 我知道在当 ..
发布时间:2022-01-18 16:06:37 其他开发

将多个命令通过管道传输到一个命令中

如何将多个命令的标准输出通过管道传输到单个命令? 示例 1:对所有三个 echo 命令的输出进行组合和排序: echo zzz;回声 aaa;回声 期望的输出: aaakkk赞 示例 2:重写以下内容,以便所有命令都在使用管道的单个命令行中,而不重定向到临时文件: setopt >/tmp/foo;取消设置>/tmp/foo;设置 >>/tmp/foo;排序/tmp/foo 解决 ..
发布时间:2022-01-02 19:10:18 其他开发

什么时候命令替换会产生比相同命令更多的子shell?

昨天有人建议我在 bash 中使用命令替换会导致生成一个不必要的子 shell.该建议专门针对此用例: #额外的子shell产生foo=$(command; echo $?)# 没有额外的子shell命令foo=$? 尽我所能,这对于这个用例来说似乎是正确的.然而,试图验证这一点的快速搜索会导致大量令人困惑和矛盾的建议.似乎流行的智慧说所有命令替换的使用都会产生一个子shell.例如: ..
发布时间:2021-12-20 16:07:08 其他开发

在bash中用其内容替换“源文件"并扩展变量

在script.sh中, 源a.sh来源b.shCMD1CMD2CMD3 如何用其内容替换 source * .sh (不执行命令)?我想看看在寻找文件并扩展所有变量之后,bash解释器将执行什么操作. 我知道我可以使用 set -n -v 或运行 bash -n -v script.sh 2> output.sh ,但这不会代替源代码命令(如果a.sh或b.sh包含变量,则更少). ..
发布时间:2021-04-14 20:20:09 其他开发

bash-管道创建一个子壳

因此,此读取是在管道之后执行的,这意味着回声的输出将被读取到 str 中-但是因为它在管道之后,所以 str 现在位于父shell无法读取的子shell中.我的问题是- str 的内容会怎样?管道是否创建了子外壳,然后将内容读入 str ,父进程是否杀死了子进程并删除了 str -还是 str 位于外壳外部的某个位置.就像我们如何看待子壳中的东西?我们可以从父外壳访问子外壳吗? echo你好| ..
发布时间:2021-04-14 19:53:41 其他开发

当存储在变量中时,subshel​​l的括号不起作用

命令: ( echo 1 ) 当我在命令行中输入它时,它工作正常,但是如果将其存储为变量并调用它,则会出现错误: (echo: command not found 代码: input="( echo 1 )" $input 为什么当我这样称呼括号时,它不以相同的方式评估括号并将其放入子壳中? 解决方案 这在 BashFAQ中进行了详细讨论. #50 . ..
发布时间:2020-07-10 03:14:10 服务器开发

如何退出子shell

基本上,我正在尝试退出包含循环的子外壳.这是代码: ` stop=0 ( # subshell start while true # Loop start do sleep 1 # Wait a second echo 1 >> /tmp/output # Add a line to ..
发布时间:2020-07-10 03:14:06 其他开发

如何避免使用while和find的subshel​​l行为?

因为我自己陷入了困境,所以我提出了一个问题,并在此给出了答案.如果find遍历命令找到的内容,则在bash执行该命令.因此,您无法在结果中填充数组并在循环后使用它. 解决方案 您必须将语法从以下位置更改: i=0 find $cont_dirs_abs -type l -exec test -e {} \; -print0 | while IFS= read -r -d '' lxc ..
发布时间:2020-07-10 03:13:59 其他开发

Powershell是否具有与bash子外壳等效的功能?

在Linux bash shell中真正很棒的一件事是,您可以在子shell中定义变量,并且在该子shell完成定义的(环境?)变量之后,只要您定义它们而不导出它们,并且在子shell中,该变量就不存在了. 例如: $ (set bob=4) $ echo $bob $ 不存在变量,因此没有输出. 我最近也在写一些powershell脚本,并注意到我一直不得不在脚本末尾清空变 ..
发布时间:2020-07-10 03:12:55 其他开发

Bash中$()和()之间的区别

当我键入ls -l $(echo file)时,将括号中的输出(这只是简单的回显)输出并传递给外部ls -l命令.等同于简单的ls -l file. 当我键入ls -l (echo file)时,出现错误,因为不能将()嵌套在外部命令中. 有人可以帮助我了解$()和()之间的区别吗? 解决方案 $(cmd)将cmd的结果替换为字符串,而(cmd; cmd)在子进程中运行命令列表 ..
发布时间:2020-07-10 03:12:53 服务器开发

Bash子shell,用于在脚本中设置SHELLOPTS

这个问题不是Cygwin特有的.但是,在cygwin邮件归档文件中, https://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html 是用于设置cygwin特定的igncr shellopt变量的各种指令,其中之一是指令: 4a.对于单个受影响的脚本,请在 she-bang:〜(set -o igncr)2>/dev/null&&设置- ..
发布时间:2020-07-10 03:11:48 其他开发