cb0*_*cb0 66 unix bash filenames
我的Unix机器上有一些文件开头
--
Run Code Online (Sandbox Code Playgroud)
例如 --testings.html
如果我尝试删除它,我会收到以下错误:
cb0$ rm --testings.html
rm: illegal option -- -
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
Run Code Online (Sandbox Code Playgroud)
我试过了
rm "--testings.html" || rm '--testings.html'
Run Code Online (Sandbox Code Playgroud)
但没有任何作用.
如何在终端上删除这些文件?
Ste*_*sop 141
rm -- --testings.html
Run Code Online (Sandbox Code Playgroud)
该--选项告诉rm将所有其他参数视为文件名,而不是选项,即使它们以-.
这不是rm命令特有的.getopt函数实现了它,并且许多(所有?)UNIX样式的命令以相同的方式处理它:--终止选项处理,以及它之后的任何常规参数.
http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt
lhu*_*ath 55
rm -- --somefile
Run Code Online (Sandbox Code Playgroud)
虽然这有效,但它是一种依赖于rm使用getopts来解析其选项的解决方案.有些应用程序可以进行自己的解析,也会对此进行解释(因为它们可能不一定实现" --选项结束"逻辑).
因此,您应该通过头骨驾驶的解决方案是:
rm ./--somefile
Run Code Online (Sandbox Code Playgroud)
它总会有效,因为这样你的论证永远不会以a开头-.
而且,如果你想要制作非常好的shell脚本; 你应该在技术上放在./你所有的文件名参数扩展前面,以防止你的脚本因文件名输入而破坏(或者防止它们被滥用/利用来做他们不应该做的事情:例如,rm会删除文件但跳过目录;同时rm -rf *删除所有内容.将" -rf" 的文件名传递给脚本或某人touch ~victim/-rf可以通过这种方式来改变其行为并带来非常糟糕的后果.