对于命令,如果-用作参数代替文件名将意味着 STDIN 或 STDOUT。
但在这个例子中,它创建了一个名为 的文件-:
echo hello > -
Run Code Online (Sandbox Code Playgroud)
我怎样才能-在这个例子中表示 STDOUT?
相反,我怎么能在示例中-命名一个文件-,例如:
cat -
Run Code Online (Sandbox Code Playgroud)给出以下命令:
gzip -dc /cdrom/cdrom0/file.tar.gz | tar xvf –
Run Code Online (Sandbox Code Playgroud)
什么是-在命令中到底意味着什么?它是某种占位符吗?
有一些实用程序接受--(双破折号)作为“选项结束”的信号,当文件名以破折号开头时需要:
$ echo "Hello World!" >-file
$ cat -- -file
Hello World!
$ cat -file # cat - -file fails in the same way.
cat: invalid option -- 'f'
Try 'cat --help' for more information.
Run Code Online (Sandbox Code Playgroud)
但是其中一些实用程序在手册页中没有显示这样的选项。
该man页面cat没有一个文件的使用(或有效性)--的说法在任何OS'es的。这并不意味着是 Unix-Linux 的火焰战争,它是一个有效的,而且我相信,有用的关注。
无论是cat,mv,ed(我相信许多人)文件中的手册页这样的选择,我可以找到。
请注意,这./-file是使用--. 例如,source(dot) 命令(并写为.)(通常)不适用于--参数:
$ echo 'echo "Hello World!"' >-file
$ . ./-file
Hello World! …Run Code Online (Sandbox Code Playgroud) 我不小心创建了一个名称为-(例如,seq 10 > -)的文件。然后我尝试使用less查看它,但它只是挂起。
我知道发生这种情况是因为less -期望输入来自stdin,因此它不会将 解释-为文件名。我试过了,less \-但它也不起作用。
那么,有没有办法表明less这-是一个文件而不是标准输入?
我能得到的最好的是:
find -name '-' -exec less {} +
Run Code Online (Sandbox Code Playgroud)