示例:
创建ISO镜像并直接刻录到CD上。
mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -
切换到上一个目录。
cd -
监听12345端口并解压发送到该端口的数据。
nc -l -p 12345 | tar xvzf -
短横线的作用是什么,我该如何使用它?
示例:
创建ISO镜像并直接刻录到CD上。
mkisofs -V Photos -r /home/vivek/photos | cdrecord -v dev=/dev/dvdrw -
切换到上一个目录。
cd -
监听12345端口并解压发送到该端口的数据。
nc -l -p 12345 | tar xvzf -
短横线的作用是什么,我该如何使用它?
如果你是指 tar 命令末尾的裸横线 - ,那在很多需要使用文件的命令中都很常见。
它允许你指定标准输入或输出,而不是一个实际的文件名。
这就是你第一个和第三个示例的情况。比如 cdrecord 命令正在获取标准输入(由 mkisofs 产生的 ISO 映像流),并将其直接写入 /dev/dvdrw 中。
在 cd 命令中,每次更改目录时,它都会存储你来自的目录。如果你使用特殊的“-”目录名执行 cd 命令,则它将使用那个记忆的目录,而不是真正的目录。你可以通过使用它来快速切换两个目录。
其他命令可能将“-”作为不同的特殊值处理。
这并不是魔法。有些命令将 -
解释为用户想要从标准输入读取或向标准输出写入;对于 Shell,它并没有什么特殊之处。
cd -
命令,否则bash(1)
会将其处理为cd $OLDPWD
的效果。 - sarnold-
意味着每个命令都有其特定的含义。有一些常见的约定,你在其他答案中也看到了大部分的例子,但它们没有一种是100%通用的。
对于shell来说,-
字符并没有什么神奇之处(除了shell本身和一些内置命令如cd
和echo
以惯例的方式使用它)。像\
、'
和"
这样的一些字符,在出现的任何地方都具有特殊的含义,它们被称为"shell元字符"。但-
不是这样的。
要了解一个给定命令如何使用-
,请阅读该命令的文档。
file
的文档中迷失了,然后发现了这个:要测试标准输入,请使用“-”作为文件名参数
。你是100%正确的。谢谢。 - Eugene这意味着使用程序的标准输入流。
对于cd
命令来说,它有不同的含义:切换到先前的工作目录。
魔力在于惯例。几千年来,人们一直使用-
作为前缀来区分选项和参数,并使用-
作为文件名,以适当的方式表示stdin或stdout。不要低估惯例的力量!
-
来代替Git分支名进行操作,例如,你可以通过运行命令git checkout -
切换回之前的分支。请注意在翻译过程中保持原意不变,尽量让内容通俗易懂。 - snappieT-
已成为一种惯例,表示“您可以为此参数输入文件路径,但如果您输入-
,我们将读取 stdin”。 - Kenmore