Rah*_*bey 2 unix bash shell operating-system cat
有人可以解释一下吗?我运行了如下所示的命令
$ cat `bash`
$ ls
$ ctrl+D
Run Code Online (Sandbox Code Playgroud)
它在终端上给了我一些意想不到的输出.
注意:bash在反引号中.
好问题!"意外输出"是cat打印cwd中ls找到的所有文件.详细说明如下:
在你的第一行:
$ cat `bash`
Run Code Online (Sandbox Code Playgroud)
该bash部分实际上从您的原始shell生成一个新的shell,因为bash被反引号括起来(反引号意味着在此上下文中运行封闭的程序)
然后你做的时候:
$ ls
Run Code Online (Sandbox Code Playgroud)
这实际上是在新生成的bash shell中完成的.它列出了新生成的bash shell所在的目录(应该与原始shell相同).反过来,这实质上改变了第一步中的cat命令
$ cat file_1 file_2 ... file_x
Run Code Online (Sandbox Code Playgroud)
(基本上ls返回该目录中的所有文件.但是,你不会看到这些结果,因为输出正在等待打印到原始shell的stdout:cat正在等待评估你的新bash的stdout贝壳.)
最后,当你这样做时:
$ ctrl+D
Run Code Online (Sandbox Code Playgroud)
它退出您从原始shell生成的新bash shell,然后cat将所有打印到新shell中的stdout(来自ls的搜索结果)输出到旧shell中.
你可以验证我刚说的话:
$ cd ~/
$ mkdir temp_test_dir
$ cd temp_test_dir
$ echo "some text for file1" > file1
$ echo "other text for file2" > file2
Run Code Online (Sandbox Code Playgroud)
现在运行您在问题中的内容:
$ cat `bash`
$ ls
$ ctrl+D
Run Code Online (Sandbox Code Playgroud)
这就是你应该看到的:
some text for file1
other text for file2
Run Code Online (Sandbox Code Playgroud)
按某种顺序,这只是cat输出ls找到的所有文件.
| 归档时间: |
|
| 查看次数: |
148 次 |
| 最近记录: |