dam*_*ien 5 gedit command-line
当试图打开sudo gedit /path/to/file文件名!以前面开头的文件时,例如!config.ini我无法打开文件。但是,如果我执行 sudo nautilus 然后用 gedit 打开文件,它会打开。如果文件被重命名,则config.inisudo gedit 再次起作用。有人可以向我解释一下吗。
您正在将sudo gedit /path/to/file命令输入 shell(默认为 bash),但现代 shell 使用“!” 特殊用途的字符。特殊字符可以在没有特殊含义的情况下通过在它们前面加上 '\' 字符来解释。
尝试:
gksudo gedit /path/to/\!file
Run Code Online (Sandbox Code Playgroud)
代替
gksudo gedit /path/to/!file
Run Code Online (Sandbox Code Playgroud)
在现代 shell 中,您输入的命令会被记住,您可以使用“!”重新输入它们。特点。!!例如重新输入最后一个命令。正如 Uri 指出的那样,这称为事件指示符。bash 解释器还让您可以使用Ctrl+R轻松找到要重新输入的命令,但“!” 对于我们有使用'!'习惯的老前辈来说,这种机制仍然存在。反而。“!”的其他用法 包括 $! 参数及其在算术和逻辑表达式中的使用。
如果遇到此类谜团,bash 参考可能会有所帮助,因为 shell 可能非常复杂。gnu bash 手册在这里。
Uri 很有帮助地提到您应该使用 gksu 或 gksudo 而不是 sudo。这里有一个解释:“gksudo nautilus”和“sudo nautilus”有什么区别?.
简单的解决方法是通过将以下行添加到您的 ~/.bashrc
set +H
Run Code Online (Sandbox Code Playgroud)
如果您从未有意使用历史扩展,则禁用它不会错过任何内容。