关于命令行中的 "-" 符号 疑问?

软件和网站开发以及相关技术探讨
回复
qq_771365380
帖子: 11
注册时间: 2017-04-08 22:13
系统: Ubuntu16.04

关于命令行中的 "-" 符号 疑问?

#1

帖子 qq_771365380 » 2018-03-10 16:18

代码: 全选

wget -q http://www.bouml.fr/bouml_key.asc -O- | sudo apt-key add -
今天看到一条命令如上:

我所理解到的:

1. wget 是一个从网络上自动下载文件的自由工具,支持通过 HTTP、HTTPS、FTP 三个最常见的 TCP/IP协议 下载,并可以使用 HTTP 代理。"wget" 这个名称来源于 “World Wide Web” 与 “get” 的结合。
2. -q, --quiet 安静模式 (无信息输出)。
3. -O, --output-document=FILE 将文档写入 FILE。 [下载并重命名]
4. | 管道符号重定向上一条命令 "wget -q http://www.bouml.fr/bouml_key.asc -O-" 的 stdout
> 管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard
error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input.
5. sudo apt-key add -
> sudo 和 apt-key add 都是理解的


我所不理解的是:
1. -O- 中的后一个 “-”
2. sudo apt-key add - 中的 “-”


为此我做了一点事情我尝试了两条命令
1. wget http://www.bouml.fr/bouml_key.asc
> 将内容下载到当前目录

代码: 全选

$  wget  http://www.bouml.fr/bouml_key.asc
--2018-03-10 15:57:23--  http://www.bouml.fr/bouml_key.asc
Resolving www.bouml.fr (www.bouml.fr)... 91.216.107.226
Connecting to www.bouml.fr (www.bouml.fr)|91.216.107.226|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1739 (1.7K) [text/plain]
Saving to: ‘bouml_key.asc’

bouml_key.asc       100%[===================>]   1.70K  --.-KB/s    in 0s      

2018-03-10 15:57:24 (68.6 MB/s) - ‘bouml_key.asc’ saved [1739/1739]


2. wget http://www.bouml.fr/bouml_key.asc -O-
>观察到:

代码: 全选

$ wget  http://www.bouml.fr/bouml_key.asc -O-
--2018-03-10 16:00:55--  http://www.bouml.fr/bouml_key.asc
Resolving www.bouml.fr (www.bouml.fr)... 91.216.107.226
Connecting to www.bouml.fr (www.bouml.fr)|91.216.107.226|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1739 (1.7K) [text/plain]
Saving to: ‘STDOUT’

-                     0%[                    ]       0  --.-KB/s               -----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.10 (GNU/Linux)

mQENBE+eQRsBCACyMvfKgtL0y/+OmSzce39i/isiXIonp0nkWYhs1IERh28cxeo9
ilbCAXA/PTkP2lWQBnkSt9SOLvyL7aVptJsjj5D8Gkyc0YM1SGGVjVMhUBohf1hf
v2FEYMH0PGk/pR6yRIu4JsdmWetfuC2ztshrtS1XvevsTM/osQHNCOmitIuORG3W
+FPH5fv+VuK349ZnjMI1ZMvf6+n2dz5tYBBpEvaZdZbfxiRQ5Vkxidl1cnOxxjA2
BEjHD8FPVAgOMf9kFlMCbnogdPqSLdzJeqnpGmrRUUpF4LZXJJbAiTs3I7Esx7AY
etLDUBVfSWy3c4nCPIP3ApCxxg/9obv1KbplABEBAAG0MEJydW5vIFBhZ2VzIChh
dXRob3Igb2YgQm91bWwpIDxjb250YWN0QGJvdW1sLmZyPokBOAQTAQIAIgUCT55B
GwIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ8TWXHW3AfHAE/wgAn/o+
V0v03FK7bt7/6eZnpeimoVFKyBxV6Ny16phOAf8RtBHYJVs1/T/hFoKGaW+wpGOC
K3k9c212nf48jn9TCAteiUyg7x78gzpNPb/B+Zigh7LspFqPuYzWpzAyiBAgQsiW
joFam/P00ilLJGC4jGgstCXdCqGDe6dEzKHuFdoTgxp9KwRj3iKtzqz2MGwA3U8l
dyNTfKsT/IePRZseOABSLKt+SsaQ4BigjKxt6BojYzBiYbN+Qp3E7tWGoCGAPF0T
/U7QWa27dyP8FIFWzYtzQ4m8mg1bMOWTHhptuhZoKP1MtT1arjERw6vWYioQvu0L
7yFI4p4Wa+hYvC9XzbkBDQRPnkEbAQgAq2vjSI4YeLLI45+6w+kWBJGGMZBgZu/k
CWlCJzZ/e2RO3C3EM+o1bkFSlBfBE1ApkRp2NlpPmA3QVQmxhGkVV3Zqll6evI93
xXYAX5yeomVNnBI0kUCnzxAGZbYQ1RjqfzG3aED0DRni/NzhQbc3B5u3rcoUjsFb
0l/FP15TWCJ8C7OAedgYgOv8+qZo1tYo0JKwa9RJVLkNSGfPDSqqPCm+0cD/Y0cA
wYRrnnvj5UmLI9oA+X1KGiUOCnhJciWQb2/+3tgVye7kMrq8O9lHVY9UdgQIeeed
p9aXHShNA8B70Q9KopEjuCWiO8iRXj2qToSuJOK7GUzlwoKAZtmH3wARAQABiQEf
BBgBAgAJBQJPnkEbAhsMAAoJEPE1lx1twHxwYNEIAJ6g2aHqIdVWKsGxHllbCxGa
fAPNSYJRIG6d8ZUSv6HrDhcnku4dOKXxEV3lWx3HhbitDKWmHspVUkrD0z7twgrv
uJQ359DHFc8CUtcr2VsY70Im4hcu/RqoQfw7f1zldAEJSqGxQif2igIpnRzMN4Gm
E0EWelIefoON3d9mA1gXVMBNHFc7gb+0iiNgO+Scma3lOrF9BhHJaZKv1zM2cbXN
whMY+bbkzoB6AlTED8suSEQGzANuvZ/QCyzjiiv/BTKttIcRXQqiYBgoI4meM6K/
jbDJYM0jh8cbT6kjIP1PMYmZowIGJiAJkzumV/A5SnRrNlf7q6vw2HieZygk//A=
=ym2Y
-----END PGP PUBLIC KEY BLOCK-----
-                   100%[===================>]   1.70K  --.-KB/s    in 0s      

2018-03-10 16:01:01 (98.6 MB/s) - written to stdout [1739/1739]

    
==============================================================================================
总结一下:
这条命令可能就是:
使用wget 命令下载一个文件,并且讲所下载的文件内容保存到 stdout 中,再次通过管道将 stdout 中的内容传送到 sudo apt-key add 作为后者的 stdinput ,在这个过程中 “-” 好像充当了 载体的作用。
在wget 命令中充当 stdout 在 apt-key 命令中充当 stdinput .。但是好像没有它存在也没什么不妥的吧【事实上去掉"-"命令没有达到预期效果】。

但是在理解上还需要在进一步。


算有一个感性认识了,还是细节不大够,希望路过的朋友,说说看法。
poloshiao
论坛版主
帖子: 18279
注册时间: 2009-08-04 16:33

Re: 关于命令行中的 "-" 符号 疑问?

#2

帖子 poloshiao » 2018-03-10 17:34

http://manpages.ubuntu.com/manpages/xen ... get.1.html
Wget - The non-interactive network downloader
-O file
--output-document=file
The documents will not be written to the appropriate files, but all
will be concatenated together and written to file. If - is used as
file, documents will be printed to standard output, disabling link
conversion.
回复