给出以下命令:
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
-
命令末尾的是什么意思?它是某种占位符吗?
答案1
在这种情况下,它意味着“标准输入”。tar
当需要文件参数并且您需要使用 stdin 时,某些软件(例如 )会使用它。它不是 shell 结构,它取决于您正在使用的程序。如果有疑问,请检查联机帮助页!
在本例中,标准输入是选项的参数-f
。如果-
不支持,您可以使用类似tar xvf /proc/self/fd/0
or的东西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
显式调用。