如何读取破折号文件

如何读取破折号文件

除了用分隔线分隔之外,如何从终端读取破折号文件./

例如要读取 a- file我们可以通过以下方式读取它

cat ./-file_name

问:有没有其他方法可以达到同样的目的?

答案1

使用 double--来标记选项的结尾:

cat -- -<FILENAME>

其他程序如touchrmgit 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

相关内容