RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1280203
Accepted
Vadim
Vadim
Asked:2022-05-10 16:54:54 +0000 UTC2022-05-10 16:54:54 +0000 UTC 2022-05-10 16:54:54 +0000 UTC

帮助 Bash 中的重定向

  • 772

我不太了解重定向逻辑。假设我在根目录 /root 中有这样的文件

ls -l
total 16692
-rw-r--r--  1 root   root   1249479 May  5 22:40 bootstrap-5.0.0-examples.zip
-rw-r--r--  1 root   root       786 May  9 12:49 in
drwxr-xr-x  9 root   root    4096 May  5 16:43 nginx-1.19.0
-rw-r--r--  1 root   root   1043748 May 26  2020 nginx-1.19.0.tar.gz
drwxrwxr-x 18 root   root      4096 May  5 16:52 openssl-1.1.1g
-rw-r--r--  1 root   root   9801502 Apr 21  2020 openssl-1.1.1g.tar.gz
-rw-r--r--  1 root   root       177 May  9 12:00 out_bash
drwxr-xr-x  9   1169   1169   12288 May  5 16:10 pcre-8.44
-rw-r--r--  1 root   root   2090750 Feb 12  2020 pcre-8.44.tar.gz
-rw-r--r--  1 root   root   2253029 May  7 11:02 v4.0.0.zip
drwxr-xr-x 14    501 staff     4096 May  5 16:18 zlib-1.2.11
-rw-r--r--  1 root   root    607698 Jan 15  2017 zlib-1.2.11.tar.gz

如果我满足

bash > out.txt

现在,如果您在同一目录中运行 ls,则 ls 将显示一个空目录!

为了让我可以再次看到我的文件和目录,我需要退出。在这种情况下,out.txt 文件将包含我所有的文件和目录的列表。

如果可能,如何实际应用?

bash
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    aleksandr barakin
    2022-05-10T23:10:12Z2022-05-10T23:10:12Z

    ls 将显示一个空目录!

    不,程序的输出,它发送到它的标准输出,不会去你的终端,但会被写入一个out.txt.


    我将尝试清楚地证明。

    这是当前bash进程(我们称其为“第一进程”)的标准文件描述符在实验之前的样子:

    $ ls -ld /proc/$$/fd/{0,1,2}
    lrwx------ 1 user user 64 May 10 17:28 /proc/11480/fd/0 -> /dev/pts/7
    lrwx------ 1 user user 64 May 10 17:28 /proc/11480/fd/1 -> /dev/pts/7
    lrwx------ 1 user user 64 May 10 17:28 /proc/11480/fd/2 -> /dev/pts/7
    

    所有三个(-stdin , -stdout , -stderr)都是符号链接到0-由(我使用)终端模拟器创建的伪终端设备。12/dev/pts/7

    无论当前bash进程(及其后代)输出到stdout和stderr的任何内容都将进入伪终端设备,并且终端仿真器将在它绘制的窗口中显示给我们。

    执行命令时bash > out.txt,我们启动一个新的bash进程(我们称之为“第二个进程”),它的标准输出将立即“附加”到文件out.txt:这个进程(以及它生成的任何子进程)发送到的所有内容stdout将被写入此文件。

    让我们看看新进程的文件描述符发生了什么:

    $ ls -ld /proc/$$/fd/{0,1,2}
    

    嗯。我什么都看不到。哦是的!我们将标准输出重定向到一个文件out.txt。如果您从附近的终端查看此文件,我们将看到ls进程的输出:

    lrwx------ 1 user user 64 May 10 18:01 /proc/22409/fd/0 -> /dev/pts/7
    l-wx------ 1 user user 64 May 10 18:01 /proc/22409/fd/1 -> /home/user/out.txt
    lrwx------ 1 user user 64 May 10 18:01 /proc/22409/fd/2 -> /dev/pts/7
    

    请注意,正在运行的进程的标准句柄号1( stdout ) 是文件引用out.txt。正是在这个文件中写入了ls进程的输出,并将其发送到他的标准输出(他从他的父级继承 - “第二个进程”)。

    如果我们现在执行命令exit,那么我们将结束“进程二”的工作,并返回到原来的状态——回到“进程一”。它将所有三个标准描述符“附加”到伪终端设备(注意进程号 - 11480 - 它与第一个列表中的相同):

    $ ls -ld /proc/$$/fd/{0,1,2}
    lrwx------ 1 user user 64 May 10 18:08 /proc/11480/fd/0 -> /dev/pts/7
    lrwx------ 1 user user 64 May 10 18:08 /proc/11480/fd/1 -> /dev/pts/7
    lrwx------ 1 user user 64 May 10 18:08 /proc/11480/fd/2 -> /dev/pts/7
    

    如果可能,如何实际应用?

    I/O 重定向几乎无处不在。使用任何 shell 脚本——你几乎肯定会在其中看到重定向。

    • 3

相关问题

  • Shell/Bash 中有常量吗?

  • 使用 grep、sed、awk 查找单词

  • 删除 docker 镜像后的消息

  • 打印到不包含的 shell 行

  • 计算规则中的值

  • sudo 命令在 Windows 上的 Git Bash 中不起作用 [关闭]

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5