除了用分隔线分隔之外,如何从终端读取破折号文件./
例如要读取 a- file
我们可以通过以下方式读取它
cat ./-file_name
问:有没有其他方法可以达到同样的目的?
答案1
使用 double--
来标记选项的结尾:
cat -- -<FILENAME>
其他程序如touch
、rm
或git checkout
也遵循此约定:
$ touch -- -file
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:13 -file
$ echo hi! >> -file
$ cat -- -file
hi!
$ rm -- -file
$ echo $?
0
警告:在脚本中始终使用--
after是一个好习惯。rm
攻击者可以将--rf
文件放置在目录中并将rm *
其作为运行参数。看看这个:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm *
$ ll
total 0
-rw-r--r-- 1 ja ja 0 Mar 10 13:21 -rf
糟糕,这不是我们的意思,我们不想删除目录。我们应该使用--
:
$ touch A
$ touch B
$ mkdir dir
$ touch dir/C
$ touch -- -rf
$ rm -- *
rm: cannot remove `dir': Is a directory
$ ll
total 4.0K
drwxr-xr-x 2 ja ja 4.0K Mar 10 13:22 dir
答案2
对于从 stdin 获取输入的命令,您可以使用重定向:
cat <-file_name
答案3
替代方案变得很奇怪:
dd if=-x 2>/dev/null