小编hac*_*cks的帖子

为什么 (...) 在后台运行时不会产生新的子进程?

运行命令后

{ sleep 5; } &  
Run Code Online (Sandbox Code Playgroud)

输出ps是(输出1)

 PID TTY           TIME CMD
  972 ttys000    0:00.27 -bash
 2556 ttys000    0:00.00 -bash
 2557 ttys000    0:00.00 sleep 5   
Run Code Online (Sandbox Code Playgroud)

而对于

( sleep 5 ) &    
Run Code Online (Sandbox Code Playgroud)

ps是(输出 2)

PID TTY           TIME CMD
 972 ttys000    0:00.28 -bash
2566 ttys000    0:00.00 sleep 5  
Run Code Online (Sandbox Code Playgroud)

()导致子shell环境,我希望在这种情况下为“输出1”,因为它会导致子进程分叉,而我希望{ sleep 5; } &在当前shell中执行时为“输出2” 。这可能看起来是一个愚蠢的问题,但我真的不明白这种行为。
我在这里缺少什么?

bash command subshell

5
推荐指数
1
解决办法
3783
查看次数

为什么 cat 命令不使用它的命令环境?

AFAIK,cat是一个外部命令,它在执行时分叉出一个新进程,就像sh -c或执行脚本一样。话虽如此,我希望cat使用它的命令环境,因为它被其他外部命令使用,比如

f=test.txt sh -c 'cat "$f"'
Run Code Online (Sandbox Code Playgroud)

这不应该显示文件的内容吗

f=test.txt cat $f    
Run Code Online (Sandbox Code Playgroud)

?


注意:我不是在问什么是 someVariable=someValue command. 我在问为什么第一个例子使用它的命令变量而不是第二个。变量扩展在第二个例子中发生的方式它应该在第一个例子中发生。

bash environment-variables cat

0
推荐指数
1
解决办法
2014
查看次数

标签 统计

bash ×2

cat ×1

command ×1

environment-variables ×1

subshell ×1