删除受保护文件时如何避免多次发出“y”

Ian*_*ici 85 command-line bash rm

我正在寻找一种解决方案来响应“rm:删除写保护的常规文件 [x] ?”

我正在考虑在 bashrc 中多次发出一个字符,然后回车。我们怎么做?

l0b*_*0b0 105

根据更新的问题进行编辑:

为避免被询问删除文件,添加-f("force") 选项:

rm -f /path/to/file
Run Code Online (Sandbox Code Playgroud)

这有一个你应该注意的副作用:如果任何给定的路径不存在,它不会报告这个,它会成功返回:

$ rm -f /nonexistent/path
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

原答案:

这是一个简单的解决方案:

yes "$string" | head -n $number | tr $'\n' $'\r'
Run Code Online (Sandbox Code Playgroud)

yes无限重复你给它的任何字符串,用换行符分隔。多次head停止$number,并将tr换行符转换为回车。由于回车,您可能看不到任何输出,但将其传递给此命令 (in bash) 应该说明它:

printf %q "$(yes "$string" | head -n $number | tr $'\n' $'\r')"
Run Code Online (Sandbox Code Playgroud)

没有的用户bash可以将结果通过管道传输到odhexdump或者xxd查看返回的实际字符。


les*_*ana 13

rm被硬编码为在写保护文件上“交互地”询问(提示等待用户输入)。有两种方法可以防止rm询问:

rm -rf somedir
Run Code Online (Sandbox Code Playgroud)

rm -r --interactive=never somedir
Run Code Online (Sandbox Code Playgroud)

(两者都可以在不-r删除文件而不是目录的情况下工作)

解释:

-f使rm“忽略不存在的文件和参数,从不提示”。

--interactive=never做它所说的:永远不要互动。换句话说:从不提示。

之间的差别-f,并--interactive=never为这部分:“忽略不存在的文件和参数”。

相比:

$ rm -rf nonexistingname
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

$ rm -r --interactive=never nonexistingname
rm: cannot remove 'nonexistingname': No such file or directory
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

在编写您不想rm交互但仍想处理错误的脚本时,差异主要是有趣的。

总结:在命令行上使用rm -rf. 在脚本中使用rm -r --interactive=never.


有关所述问题的答案(“如何避免在删除受保护文件时多次发出“y””),请参阅https://askubuntu.com/questions/338857/automatically-enter-input-in-command-line /338860#338860


slm*_*slm 10

我不时遇到的另一个问题rm是别名为rm -i,在 /etc/bashrc 中是这样的:

alias rm='rm -i'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你可以unalias rm或者你可以使用我多年前发现的这个技巧,在一个被别名化的命令前面放一个反斜杠,一次忽略别名,例如:

\rm somefile
Run Code Online (Sandbox Code Playgroud)

您可以通过Nixcraft 上的文章了解有关别名的更多信息。