有人可以解释一下吗?我运行了如下所示的命令
$ cat `bash`
$ ls
$ ctrl+D
它在终端上给了我一些意想不到的输出。
注意:bash
在反引号中。
有人可以解释一下吗?我运行了如下所示的命令
$ cat `bash`
$ ls
$ ctrl+D
它在终端上给了我一些意想不到的输出。
注意:bash
在反引号中。
好问题!“意外输出”是 cat 打印 ls 在 cwd 中找到的所有文件。详细解释如下:
在你的第一行:
$ cat `bash`
该bash
部分实际上从原始 shell 生成了一个新 shell,因为 bash 被反引号括起来(反引号意味着在这种情况下运行封闭的程序)
那么当你这样做时:
$ ls
这实际上是在新生成的 bash shell 中完成的。它列出了新生成的 bash shell 所在的目录(应该与原始目录相同)。反过来,这实质上将第一步中的 cat 命令更改为
$ cat file_1 file_2 ... file_x
(基本上该目录中的所有文件都由 ls 返回。但是,您不会看到这些结果,因为输出正在等待打印到原始 shell 的标准输出: cat is waiting to evaluate the stdout of your new bash贝壳。)
最后,当你这样做时:
$ ctrl+D
它退出您从原始 shell 生成的新 bash shell,然后 cat 将新 shell 中打印到标准输出的所有内容(来自 ls 的搜索结果)输出到旧 shell。
您可以通过以下方式验证我刚才所说的:
$ cd ~/
$ mkdir temp_test_dir
$ cd temp_test_dir
$ echo "some text for file1" > file1
$ echo "other text for file2" > file2
现在运行您在问题中的内容:
$ cat `bash`
$ ls
$ ctrl+D
这是你应该看到的:
some text for file1
other text for file2
以某种顺序,这只是 cat 输出 ls 找到的所有文件。