Lorsque vous essayez d'ouvrir un fichier avec Sudo gedit /path/to/file
avec un nom de fichier commençant par !
devant, par exemple !config.ini
, je ne peux pas ouvrir le fichier. Cependant, si je fais Sudo nautilus, puis que j'ouvre le fichier avec gedit, il s'ouvre. Si le fichier est renommé config.ini
Sudo gedit fonctionne à nouveau. Quelqu'un pourrait-il m'expliquer, s'il vous plaît?.
Vous entrez la commande Sudo gedit /path/to/file
dans un shell (par défaut, bash), mais les shells modernes utilisent le caractère "!" personnage à des fins spéciales. Les caractères spéciaux peuvent être interprétés sans signification particulière en les faisant précéder du caractère '\'.
Essayer:
gksu gedit /path/to/\!file
au lieu de
gksu gedit /path/to/!file
Dans les shells modernes, les commandes que vous entrez sont mémorisées et vous pouvez les ressaisir en utilisant le signe "!" personnage. !!
par exemple, rentre la dernière commande. Comme Uri le fait remarquer, cela s'appelle un indicateur d'événement. L'interprète bash vous permet également d'utiliser Ctrl-R pour trouver facilement les commandes que vous souhaitez ré-entrer, mais le caractère '!' Le mécanisme est toujours là pour nous, les anciens, qui avons l'habitude d'utiliser '!' au lieu. Autres utilisations de "!" inclure le $! paramètre et son utilisation dans les expressions arithmétiques et logiques.
Une référence bash peut être utile si vous rencontrez de tels mystères car les coquilles peuvent être très compliquées. Le manuel de gnu bash est ici .
Uri a utilement mentionné que vous devriez utiliser gksu ou gksudo plutôt que Sudo. Il y a une explication ici: Quelle est la différence entre "gksudo nautilus" et "Sudo nautilus"? .
La solution facile consiste à désactiver de manière permanente le développement de l'historique en ajoutant la ligne suivante à votre ~/.bashrc
set +H
Si vous n'avez jamais utilisé intentionnellement l'expansion de l'historique, vous ne manquerez rien en la désactivant.
C'est un désignateur d'événement.
voir man bash
:
Une solution complète consisterait à mettre le nom du répertoire entre guillemets simples ('
).
Exemple
Sudo gedit /media/alexandro/'Disco Local'/'Dropbox (Equipe Alexandro)'/Pessoal/'!A Organizar'/Documentos/'!asd.txt'