命令末尾的破折号“-”是什么意思?

命令末尾的破折号“-”是什么意思?

给出以下命令:

gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –

-命令末尾的是什么意思?它是某种占位符吗?

答案1

在这种情况下,它意味着“标准输入”。tar当需要文件参数并且您需要使用 stdin 时,某些软件(例如 )会使用它。它不是 shell 结构,它取决于您正在使用的程序。如果有疑问,请检查联机帮助页!

在本例中,标准输入是选项的参数-f。如果-不支持,您可以使用类似tar xvf /proc/self/fd/0or的东西tar xvf /dev/stdin(后者在各种 unice 中得到广泛支持)。

不要依赖它来表示普遍的“标准输入”。由于它不被 shell 解释,因此每个程序都可以随意处理它。在某些情况下,这是标准的输出或者完全不同的东西:su它表示“启动登录外壳”。在其他情况下,它根本不被解释。肌肉记忆使我创建了相当多的文件,-因为我习惯的某些程序的某些版本不理解破折号。

答案2

在这种情况下,-假设您运行的是 Linux,则实际上毫无用处:

GNU tar(Linux 上的版本)默认接受标准输入的输入。如果你这样做不是想要这种行为,并且想要将文件名作为命令行参数传递,那么您需要指定标志f

tar xf filename

所以这与

tar x < filename

或者,如果输入被压缩,如您的示例所示:

gzip -dc filename | tar x

在这里指定标志根本没有意义f,但是因为指定了标志,所以需要给出文件名以-表明我们要从标准输入读取(请参阅其他答案)。所以,重复一遍,这是多余的,而且有点奇怪。

gzip此外,上面的行可以简化,因为可以通过指定标志来告诉 GNU tar 通过自身流式传输输入z

tar xfz filename

– 无需gzip显式调用。

相关内容