Почему sudo gedit НЕ открывает файлы, начинающиеся с восклицательного знака
При попытке открыть файл с sudo gedit /path/to/file с именем файла, начинающимся с ! перед например !config.ini я не могу открыть файл. Однако, если я сделаю sudo nautilus, откройте файл с помощью gedit, и он откроется. Если файл переименован config.ini Судо Гедит снова работает. Может кто-нибудь объяснить мне, пожалуйста.
4 ответа
Вы входите в sudo gedit /path/to/file команда в оболочку (по умолчанию bash), но современные оболочки используют '!' персонаж для специальных целей. Специальные символы могут быть интерпретированы без специального значения, если им предшествует символ "\".
Пытаться:
gksu gedit /path/to/\!file
вместо
gksu gedit /path/to/!file
В современных оболочках введенные вами команды запоминаются, и вы можете вводить их заново, используя "!" персонаж. !! например, повторно вводит последнюю команду. Как указывает Ури, это называется указателем события. Интерпретатор bash также позволяет вам использовать Ctrl-R, чтобы легко находить команды, которые вы хотите повторно ввести, но "!" механизм все еще существует для нас, стариков, которые имеют привычку использовать "!" вместо. Другое использование "!" включите $! параметр и его использование в арифметических и логических выражениях.
Ссылка на bash может быть полезна, если вы столкнетесь с такими загадками, потому что оболочки могут быть очень сложными. Руководство по GNU Bash здесь.
Ури любезно упомянул, что вы должны использовать gksu или gksudo, а не sudo. Здесь есть объяснение: в чем разница между "gksudo nautilus" и "sudo nautilus"?,
Простое решение - навсегда отключить расширение истории, добавив следующую строку в ~/.bashrc
set +H
Если вы никогда не использовали преднамеренно расширение истории, вы ничего не пропустите, отключив его.
Это обозначение события.
увидеть man bash:
- ! Расширяется до идентификатора процесса последней выполненной фоновой (асинхронной) команды.
Полное решение заключается в том, чтобы поместить имя каталога в одинарные кавычки (').
пример
sudo gedit /media/alexandro/'Disco Local'/'Dropbox (Equipe Alexandro)'/Pessoal/'!A Organizar'/Documentos/'!asd.txt'