Bash 流水线执行

标签 bash

netcat 联机帮助页指出,在没有 -c 和 -e 选项的情况下,可以使用以下命令通过 nc 提供 shell。

$ rm -f /tmp/f; mkfifo /tmp/f
$ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f

现在,据我了解,从 fifos 读取和写入都是阻塞操作。例如,如果我运行

$ mkfifo foo
$ cat foo

bash 会阻塞,因为没有任何内容写入 foo。 nc 联机帮助页示例中的管道如何不阻塞?我想我误解了管道的执行方式。

最佳答案

管道中的所有命令同时运行,而不是顺序运行。所以 cat/tmp/f 确实会阻塞,但是 /bin/shnc 仍然会在发生这种情况时启动。当客户端连接到端口并发送命令时,nc 将写入 FIFO,这将允许 cat 解锁。

关于Bash 流水线执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25734300/

相关文章:

linux - 如何使这个 (l)unix 脚本在 for 循环中动态接受目录名称?

bash - 从脚本中找不到 docker-compose

java - 单次登录 SSH,共享 session 来运行 git-receive-pack 并远程运行一些其他命令

linux - 使用shell脚本修改/etc/hosts文件

linux - 了解 bash 大括号扩展

linux - 使用列条件在 uniq 之后打印行

bash - 当我想查看 bash 中某些内容的 grep 输出时,如何检索 header ?

linux - 为什么在存在目标的情况下,bash 中的否定文件存在检查会返回奇怪的结果?

bash - Git 跨分支检查文件内容

bash - 从 bash 调用时 screen 以不同方式转义