我经常在Bash中使用管道,例如:
dmesg | less
Run Code Online (Sandbox Code Playgroud)
虽然我知道这是什么输出,它需要dmesg并让我滚动它less,我不明白|它在做什么.它恰恰相反>吗?
|?我在多个地方读到管道的默认缓冲区大小是4kB(例如,这里),我ulimit -a倾向于确认该语句:
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 15923
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8 // 8 * 512B = 4kB
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 10240
cpu time (seconds, …Run Code Online (Sandbox Code Playgroud) 我想了解shell如何执行管道命令?例如猫| 更多.我知道执行正常的命令shell会执行fork,执行它然后子返回.但shell如何在内部处理管道命令的执行?
假设以下简单代码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
main()
{
int fd[2];
pipe(fd);
// ...
write(fd, buf, VERY_BIG_NUMBER);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题:
我必须运行此命令来安装NPM。它有什么作用?什么是| 在最后?
curl https://raw.githubusercontent.com/creationix/nvm/v0.23.2/install.sh | bash
Run Code Online (Sandbox Code Playgroud)
另外,我是否在Bash中运行类似UNIX的命令?为什么这样做?Bash是终端的UNIX命令兼容接口吗?