为什么管道重置当前的工作目录?

yeg*_*256 7 bash shell

第一个脚本:

$ { mkdir dir; cd dir; pwd; } | cat; pwd;
./dir
.
Run Code Online (Sandbox Code Playgroud)

第二个脚本:

$ { mkdir dir; cd dir; pwd; }; pwd;
./dir
./dir
Run Code Online (Sandbox Code Playgroud)

为什么这| cat对当前目录有影响?以及如何解决?我需要第一个脚本完全像第二个脚本一样工作.我不想cat将当前目录更改回..

dev*_*ull 11

引自手册:

管道中的每个命令都在其自己的子shell中执行(请参阅 命令执行环境).

另请参阅分组命令:

{}

   { list; }
Run Code Online (Sandbox Code Playgroud)

在大括号之间放置命令列表会导致列表在当前shell上下文中执行.没有创建子shell.