为什么 sudo gedit 不能打开以感叹号开头的文件

为什么 sudo gedit 不能打开以感叹号开头的文件

例如,当我尝试打开一个sudo gedit /path/to/file文件名以 a!开头的文件!config.ini时,我无法打开该文件。但是,如果我使用 sudo nautilus 然后用 gedit 打开该文件,它就会打开。如果将文件重命名,config.inisudo gedit 再次有效。有人能给我解释一下吗?

答案1

您正在将sudo gedit /path/to/file命令输入到 shell(默认情况下为 bash),但现代 shell 使用 '!' 字符来表示特殊用途。通过在特殊字符前加上 '\' 字符,可以解释这些特殊字符,而这些特殊字符没有特殊含义。

尝试:

gksudo gedit /path/to/\!file

代替

gksudo gedit /path/to/!file

在现代 shell 中,您输入的命令会被记住,您可以使用“!”字符重新输入它们。!!例如,重新输入最后一个命令。正如 Uri 指出的那样,这称为事件指示符。bash 解释器还允许您使用Ctrl+R轻松找到要重新输入的命令,但对于我们这些习惯使用“!”的老用户来说,“!”机制仍然存在。“!”的其他用途包括 $!参数,以及它在算术和逻辑表达式中的使用。

如果你遇到这样的问题,bash 参考可能会有所帮助,因为 shell 可能非常复杂。gnu bash 手册是这里

Uri 有帮助地提到您应该使用 gksu 或 gksudo 而不是 sudo。这里有一个解释:“gksudo nautilus”和“sudo nautilus”有什么区别?

答案2

简单的解决方法是永久禁用历史记录扩展,方法是将以下行添加到您的~/.bashrc

set +H

如果您从未有意使用过历史记录扩展,则禁用它不会让您错过任何内容。

答案3

它是一个事件指示器。

man bash

  • ! 扩展为最近执行的后台(异步)命令的进程 ID。

答案4

完整的解决方案是将目录名称放在单引号 ( ') 内。

例子

sudo gedit /media/alexandro/'Disco Local'/'Dropbox (Equipe Alexandro)'/Pessoal/'!A Organizar'/Documentos/'!asd.txt'

相关内容