Почему 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'

Другие вопросы по тегам