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可以将结果通过管道传输到od,hexdump或者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 上的文章了解有关别名的更多信息。
| 归档时间: |
|
| 查看次数: |
223228 次 |
| 最近记录: |