例子:
创建一个 ISO 映像并将其直接刻录到 CD 上。
mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -
切换到上一个目录。
cd -
监听端口12345并解除发送给它的数据。
nc -l -p 12345 | tar xvzf -
破折号的用途是什么? 我如何使用它?
它意味着使用程序的标准输入流。
就 cd而言,它的意思有所不同: 改变先前的工作目录。
cd
这不是魔法。有些命令将 -解释为用户希望从 stdin 读取或写入 stdout; 对于 shell 来说,-没有任何特殊之处。
-
如果您指的是 tar命令末尾的裸 -,那么这在许多希望使用文件的命令中都很常见。
tar
它允许您指定标准输入或输出,而不是 真的文件名。
这就是第一个和第三个例子的情况。例如,cdrecord命令获取标准输入(由 mkisofs产生的 ISO 图像流)并将其直接写入 /dev/dvdrw。
cdrecord
mkisofs
/dev/dvdrw
使用 cd命令,每次更改目录时,它都会存储来自的目录。如果使用特殊的 -“目录名”执行 cd,它将使用记忆的目录而不是真正的目录。通过使用它,您可以很容易地在两个目录之间快速切换。
其他命令可能将 -视为 与众不同特殊值。
魔法就在大会里。几千年来,人们一直使用“-”来区分选项和参数,并在文件名中酌情使用“-”来表示 stdin 或 stdout。不要低估传统的力量!
-的意思正是每个命令希望它表示的意思。这里有几个常见的惯例,你们已经在其他答案中看到了大多数的例子,但是没有一个是100% 通用的。
就 shell 而言,-字符没有什么神奇之处(除了 shell 本身以及它的一些内置命令(如 cd和 echo)以常规方式使用它)。有些字符,如 \、 '和 "、 是“神奇的”,无论它们出现在哪里都有特殊的含义。这些是“ shell 元字符”。-不是那样的。
echo
\
'
"
查看给定命令如何使用 -、 阅读该命令的文档。