При попытке открыть файл с sudo gedit /path/to/file
с именем файла, начинающимся с !
, например, !config.ini
, я не могу открыть файл. Однако, если я сделаю sudo nautilus, откройте файл с помощью gedit, и он откроется. Если файл переименован в config.ini
, sudo gedit снова работает. Может кто-нибудь объяснить мне, пожалуйста.
Это обозначение события.
см. man bash
:
Легкое решение - навсегда отключить расширение истории, добавив следующую строку в ~/.bashrc
set +H
Если вы никогда не использовали преднамеренно расширение истории, вы ничего не пропустите, отключить его.
Полное решение было бы заключить имя каталога в одинарные кавычки ('
).
Пример
sudo gedit /media/alexandro/'Disco Local'/'Dropbox (Equipe Alexandro)'/Pessoal/'!A Organizar'/Documentos/'!asd.txt'
Вы вводите команду 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"? .